VTK
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 
92  vtkPlot* GetPlot(vtkIdType index) override;
93 
98  virtual vtkIdType GetPlotIndex(vtkPlot*);
99 
105  vtkIdType RaisePlot(vtkPlot* plot);
106 
113  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
114 
120  vtkIdType LowerPlot(vtkPlot* plot);
121 
128  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
129 
133  vtkIdType GetNumberOfPlots() override;
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 
167  vtkChartLegend* GetLegend() override;
168 
172  virtual void SetTooltip(vtkTooltipItem* tooltip);
173 
177  virtual vtkTooltipItem* GetTooltip();
178 
182  vtkIdType GetNumberOfAxes() override;
183 
188  void RecalculateBounds() override;
189 
197  void SetSelectionMethod(int method) override;
198 
202  void RemovePlotSelections();
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 
302  virtual void SetTooltipInfo(const vtkContextMouseEvent&, const vtkVector2d&, vtkIdType, vtkPlot*,
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:
381  vtkChartXY();
382  ~vtkChartXY() override;
383 
387  void RecalculatePlotTransforms();
388 
393  void RecalculatePlotBounds();
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:44
vtkChart::GetNumberOfPlots
virtual vtkIdType GetNumberOfPlots()
Get the number of plots the chart contains.
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:34
vtkChart::RemovePlot
virtual bool RemovePlot(vtkIdType index)
Remove the plot at the specified index, returns true if successful, false if the index was invalid.
vtkContextKeyEvent
data structure to represent key events.
Definition: vtkContextKeyEvent.h:34
vtkChart::SetSelectionMethod
virtual void SetSelectionMethod(int method)
Set the selection method, which controls how selections are handled by the chart.
vtkChartXY::Legend
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:418
vtkX3D::type
Definition: vtkX3D.h:522
vtkIdType
int vtkIdType
Definition: vtkType.h:343
vtkChartPlotData
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition: vtkChartXY.h:558
vtkTransform2D
describes linear transformations via a 3x3 matrix
Definition: vtkTransform2D.h:45
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkX3D::key
Definition: vtkX3D.h:263
vtkChartLegend
draw the chart legend
Definition: vtkChartLegend.h:39
vtkChart.h
vtkAbstractContextItem::KeyPressEvent
virtual bool KeyPressEvent(const vtkContextKeyEvent &key)
Key press event.
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
vtkTooltipItem
takes care of drawing 2D axes
Definition: vtkTooltipItem.h:39
vtkContext2D
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:52
vtkChart::SetAxis
virtual void SetAxis(int axisIndex, vtkAxis *)
Set the axis specified by axisIndex.
vtkChart::AddPlot
virtual vtkPlot * AddPlot(int type)
Add a plot to the chart, defaults to using the name of the y column.
vtkChartXY::DragPointAlongX
bool DragPointAlongX
Properties to enable the drag of a point for the ClickAndDrag Action.
Definition: vtkChartXY.h:501
vtkPlot
Abstract class for 2D plots.
Definition: vtkPlot.h:46
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
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkVector2d
Definition: vtkVector.h:444
vtkChartXY::ZoomWithMouseWheel
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:490
vtkX3D::position
Definition: vtkX3D.h:267
vtkChart::Paint
bool Paint(vtkContext2D *painter) override=0
Paint event for the chart, called whenever the chart needs to be drawn.
vtkChartXY::DragPointAlongY
bool DragPointAlongY
Definition: vtkChartXY.h:502
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
vtkChart::GetLegend
virtual vtkChartLegend * GetLegend()
Get the legend for the chart, if available.
vtkPlotGrid
takes care of drawing the plot grid
Definition: vtkPlotGrid.h:38
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:33
vtkChartXY::PlotTransformValid
bool PlotTransformValid
Does the plot area transform need to be recalculated?
Definition: vtkChartXY.h:428
vtkAbstractContextItem::Hit
virtual bool Hit(const vtkContextMouseEvent &mouse)
Return true if the supplied x, y coordinate is inside the item.
vtkChart::GetPlot
virtual vtkPlot * GetPlot(vtkIdType index)
Get the plot at the specified index, returns null if the index is invalid.
vtkSmartPointer.h
vtkContextPolygon
Definition: vtkContextPolygon.h:26
vtkAbstractContextItem::MouseMoveEvent
virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse)
Mouse move event.
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
vtkAbstractContextItem::MouseButtonReleaseEvent
virtual bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse)
Mouse button release event.
vtkIdTypeArray
dynamic, self-adjusting array of vtkIdType
Definition: vtkIdTypeArray.h:35
vtkChart::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkAxis
takes care of drawing 2D axes
Definition: vtkAxis.h:68
vtkAbstractContextItem::MouseEnterEvent
virtual bool MouseEnterEvent(const vtkContextMouseEvent &mouse)
Mouse enter event.
vtkChart::ClearPlots
virtual void ClearPlots()
Remove all plots from the chart.
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
vtkChart::RecalculateBounds
virtual void RecalculateBounds()
Request that the chart recalculates the range of its axes.
vtkChart::GetNumberOfAxes
virtual vtkIdType GetNumberOfAxes()
Get the number of axes in the current chart.
vtkAbstractContextItem::MouseLeaveEvent
virtual bool MouseLeaveEvent(const vtkContextMouseEvent &mouse)
Mouse leave event.
vtkAbstractContextItem::MouseButtonPressEvent
virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse)
Mouse button down event Return true if the item holds the event, false if the event can be propagated...
vtkVector2i
Some derived classes for the different vectors commonly used.
Definition: vtkVector.h:419
vtkChartPlotData::Index
int Index
Definition: vtkChartXY.h:563
vtkChartXY
Factory class for drawing XY charts.
Definition: vtkChartXY.h:45
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:34
vtkChartXY::DrawSelectionPolygon
bool DrawSelectionPolygon
Should the selection polygon be drawn.
Definition: vtkChartXY.h:449
vtkChartXY::DrawBox
bool DrawBox
Should the box be drawn (could be selection, zoom etc).
Definition: vtkChartXY.h:438
vtkX3D::index
Definition: vtkX3D.h:252
vtkChart::GetAxis
virtual vtkAxis * GetAxis(int axisIndex)
Get the axis specified by axisIndex.
vtkRectf
Definition: vtkRect.h:326
vtkVector2f
Definition: vtkVector.h:432
vtkAbstractContextItem::MouseWheelEvent
virtual bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta)
Mouse wheel event, positive delta indicates forward movement of the wheel.
vtkChart::SetShowLegend
virtual void SetShowLegend(bool visible)
Set/get whether the chart should draw a legend.
vtkAbstractContextItem::Update
virtual void Update()
Perform any updates to the item that may be necessary before rendering.