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 
33 #ifndef vtkChartXY_h
34 #define vtkChartXY_h
35 
36 #include "vtkChart.h"
37 #include "vtkChartsCoreModule.h" // For export macro
38 #include "vtkContextPolygon.h" // For vtkContextPolygon
39 #include "vtkSmartPointer.h" // For SP ivars
40 #include "vtkVector.h" // For vtkVector2f in struct
41 
42 class vtkPlot;
43 class vtkAxis;
44 class vtkPlotGrid;
45 class vtkChartLegend;
46 class vtkTooltipItem;
47 class vtkChartXYPrivate; // Private class to keep my STL vector in...
48 
49 class VTKCHARTSCORE_EXPORT vtkChartXY : public vtkChart
50 {
51 public:
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  vtkIdType AddPlot(vtkPlot* plot) override;
81 
86  bool RemovePlot(vtkIdType index) override;
87 
91  void ClearPlots() override;
92 
97 
103 
110 
117  virtual vtkIdType StackPlotAbove(vtkPlot* plot, vtkPlot* under);
118 
125 
132  virtual vtkIdType StackPlotUnder(vtkPlot* plot, vtkPlot* above);
133 
138 
142  int GetPlotCorner(vtkPlot* plot);
143 
147  void SetPlotCorner(vtkPlot* plot, int corner);
148 
154  vtkAxis* GetAxis(int axisIndex) override;
155 
161  virtual void SetAxis(int axisIndex, vtkAxis*) override;
162 
166  void SetShowLegend(bool visible) override;
167 
172 
176  virtual void SetTooltip(vtkTooltipItem* tooltip);
177 
182 
187 
192  void RecalculateBounds() override;
193 
201  void SetSelectionMethod(int method) override;
202 
207 
209 
212  vtkSetMacro(DrawAxesAtOrigin, bool);
213  vtkGetMacro(DrawAxesAtOrigin, bool);
214  vtkBooleanMacro(DrawAxesAtOrigin, bool);
216 
218 
222  vtkSetMacro(AutoAxes, bool);
223  vtkGetMacro(AutoAxes, bool);
224  vtkBooleanMacro(AutoAxes, bool);
226 
228 
231  vtkSetMacro(HiddenAxisBorder, int);
232  vtkGetMacro(HiddenAxisBorder, int);
234 
236 
241  vtkSetMacro(ForceAxesToBounds, bool);
242  vtkGetMacro(ForceAxesToBounds, bool);
243  vtkBooleanMacro(ForceAxesToBounds, bool);
245 
247 
254  vtkSetMacro(BarWidthFraction, float);
255  vtkGetMacro(BarWidthFraction, float);
257 
259 
265  vtkSetMacro(ZoomWithMouseWheel, bool);
266  vtkGetMacro(ZoomWithMouseWheel, bool);
267  vtkBooleanMacro(ZoomWithMouseWheel, bool);
269 
271 
276  vtkSetMacro(AdjustLowerBoundForLogPlot, bool);
277  vtkGetMacro(AdjustLowerBoundForLogPlot, bool);
278  vtkBooleanMacro(AdjustLowerBoundForLogPlot, bool);
280 
282 
287  vtkSetMacro(DragPointAlongX, bool);
288  vtkGetMacro(DragPointAlongX, bool);
289  vtkBooleanMacro(DragPointAlongX, bool);
291 
293 
298  vtkSetMacro(DragPointAlongY, bool);
299  vtkGetMacro(DragPointAlongY, bool);
300  vtkBooleanMacro(DragPointAlongY, bool);
302 
307  vtkIdType segmentIndex = -1);
308 
312  bool Hit(const vtkContextMouseEvent& mouse) override;
313 
317  bool MouseEnterEvent(const vtkContextMouseEvent& mouse) override;
318 
322  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
323 
327  bool MouseLeaveEvent(const vtkContextMouseEvent& mouse) override;
328 
332  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
333 
337  bool MouseButtonReleaseEvent(const vtkContextMouseEvent& mouse) override;
338 
342  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
343 
347  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
348 
349 protected:
351  ~vtkChartXY() override;
352 
357 
363 
369  virtual bool UpdateLayout(vtkContext2D* painter);
370 
376  virtual int GetLegendBorder(vtkContext2D* painter, int axisPosition);
377 
382  virtual void SetLegendPosition(const vtkRectf& rect);
383 
388 
393 
398 
403 
407  bool DrawBox;
408 
414 
419 
424 
431 
435  bool AutoAxes;
436 
441 
447 
454 
460 
466 
472 
473 private:
474  vtkChartXY(const vtkChartXY&) = delete;
475  void operator=(const vtkChartXY&) = delete;
476 
477  vtkChartXYPrivate* ChartPrivate; // Private class where I hide my STL containers
478 
483  bool DragPoint;
484 
488  void CalculateBarPlots();
489 
495  bool LocatePointInPlots(const vtkContextMouseEvent& mouse, int invokeEvent = -1);
496 
497  int LocatePointInPlot(const vtkVector2f& position, const vtkVector2f& tolerance,
498  vtkVector2f& plotPos, vtkPlot* plot, vtkIdType& segmentIndex);
499 
503  bool RemovePlotFromCorners(vtkPlot* plot);
504 
505  void ZoomInAxes(vtkAxis* x, vtkAxis* y, float* orign, float* max);
506 
511  void ReleasePlotSelections();
512 
516  void TransformBoxOrPolygon(bool polygonMode, vtkTransform2D* transform,
517  const vtkVector2f& mousePosition, vtkVector2f& min, vtkVector2f& max,
518  vtkContextPolygon& polygon);
519 };
520 
522 
528 {
532  int Index;
533 };
535 
536 #endif // vtkChartXY_h
vtkChart
Factory class for drawing 2D charts.
Definition: vtkChart.h:51
vtkChartXY::MouseBox
vtkRectf MouseBox
The box created as the mouse is dragged around the screen.
Definition: vtkChartXY.h:402
vtkContextPolygon.h
vtkContextMouseEvent
data structure to represent mouse events.
Definition: vtkContextMouseEvent.h:41
vtkChartXY::MouseLeaveEvent
bool MouseLeaveEvent(const vtkContextMouseEvent &mouse) override
Mouse leave event.
vtkChartXY::GetPlotIndex
virtual vtkIdType GetPlotIndex(vtkPlot *)
Get the index of the specified plot, returns -1 if the plot does not belong to the chart.
vtkContextKeyEvent
data structure to represent key events.
Definition: vtkContextKeyEvent.h:35
vtkChartXY::StackPlotAbove
virtual vtkIdType StackPlotAbove(vtkPlot *plot, vtkPlot *under)
Raises the plot above the under plot.
vtkChartXY::Legend
vtkSmartPointer< vtkChartLegend > Legend
The legend for the chart.
Definition: vtkChartXY.h:387
vtkChartXY::MouseButtonReleaseEvent
bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse) override
Mouse button release event.
vtkChartXY::GetNumberOfAxes
vtkIdType GetNumberOfAxes() override
Get the number of axes in the current chart.
vtkChartXY::~vtkChartXY
~vtkChartXY() override
vtkChartXY::SetShowLegend
void SetShowLegend(bool visible) override
Set whether the chart should draw a legend.
vtkX3D::type
@ type
Definition: vtkX3D.h:516
vtkIdType
int vtkIdType
Definition: vtkType.h:347
vtkChartPlotData
Small struct used by InvokeEvent to send some information about the point that was clicked on.
Definition: vtkChartXY.h:528
vtkChartXY::RaisePlot
vtkIdType RaisePlot(vtkPlot *plot)
Raises the plot to the top of the plot's stack.
vtkTransform2D
describes linear transformations via a 3x3 matrix
Definition: vtkTransform2D.h:52
vtkChartXY::MouseWheelEvent
bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta) override
Mouse wheel event, positive delta indicates forward movement of the wheel.
vtkX3D::key
@ key
Definition: vtkX3D.h:257
vtkChartLegend
draw the chart legend
Definition: vtkChartLegend.h:43
vtkChart.h
vtkChartXY::Hit
bool Hit(const vtkContextMouseEvent &mouse) override
Return true if the supplied x, y coordinate is inside the item.
vtkChartPlotData::SeriesName
vtkStdString SeriesName
Definition: vtkChartXY.h:529
vtkChartXY::Tooltip
vtkSmartPointer< vtkTooltipItem > Tooltip
The tooltip item for the chart - can be used to display extra information.
Definition: vtkChartXY.h:392
vtkSmartPointer< vtkChartLegend >
vtkVector.h
vtkChartXY::SetLegendPosition
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...
vtkChartXY::LowerPlot
vtkIdType LowerPlot(vtkPlot *plot)
Lowers the plot to the bottom of the plot's stack.
vtkTooltipItem
takes care of drawing 2D axes
Definition: vtkTooltipItem.h:40
vtkContext2D
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:59
vtkChartXY::DragPointAlongX
bool DragPointAlongX
Properties to enable the drag of a point for the ClickAndDrag Action.
Definition: vtkChartXY.h:470
vtkChartXY::MouseEnterEvent
bool MouseEnterEvent(const vtkContextMouseEvent &mouse) override
Mouse enter event.
vtkPlot
Abstract class for 2D plots.
Definition: vtkPlot.h:53
vtkChartXY::AutoAxes
bool AutoAxes
Should axes be turned on and off automatically - defaults to on.
Definition: vtkChartXY.h:435
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:446
vtkChartXY::DrawNearestPoint
bool DrawNearestPoint
Should we draw the location of the nearest point on the plot?
Definition: vtkChartXY.h:423
vtkChartXY::GetPlot
vtkPlot * GetPlot(vtkIdType index) override
Get the plot at the specified index, returns null if the index is invalid.
max
#define max(a, b)
Definition: vtkX3DExporterFIWriterHelper.h:31
vtkVector2d
Definition: vtkVector.h:428
vtkChartXY::Update
void Update() override
Perform any updates to the item that may be necessary before rendering.
vtkChartXY::ZoomWithMouseWheel
bool ZoomWithMouseWheel
Property to enable zooming the chart with the mouse wheel.
Definition: vtkChartXY.h:459
vtkX3D::position
@ position
Definition: vtkX3D.h:261
vtkChartXY::KeyPressEvent
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Key press event.
vtkChartXY::DragPointAlongY
bool DragPointAlongY
Definition: vtkChartXY.h:471
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:430
vtkChartXY::GetNumberOfPlots
vtkIdType GetNumberOfPlots() override
Get the number of plots the chart contains.
vtkChartXY::RecalculatePlotBounds
void RecalculatePlotBounds()
Calculate the optimal zoom level such that all of the points to be plotted will fit into the plot are...
vtkChartXY::New
static vtkChartXY * New()
Creates a 2D Chart object.
vtkChartXY::SetSelectionMethod
void SetSelectionMethod(int method) override
Set the selection method, which controls how selections are handled by the chart.
vtkChartXY::GetLegend
vtkChartLegend * GetLegend() override
Get the vtkChartLegend object that will be displayed by the chart.
vtkPlotGrid
takes care of drawing the plot grid
Definition: vtkPlotGrid.h:39
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:465
vtkChartXY::ForceAxesToBounds
bool ForceAxesToBounds
Property to force the axes to have their Minimum and Maximum properties inside the plot boundaries.
Definition: vtkChartXY.h:453
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkChartXY::PlotTransformValid
bool PlotTransformValid
Does the plot area transform need to be recalculated?
Definition: vtkChartXY.h:397
vtkChartXY::GetTooltip
virtual vtkTooltipItem * GetTooltip()
Get the vtkTooltipItem object that will be displayed by the chart.
vtkChartXY::MouseButtonPressEvent
bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse) override
Mouse button down event.
vtkChartXY::AddPlot
vtkIdType AddPlot(vtkPlot *plot) override
Adds a plot to the chart.
vtkChartXY::RecalculatePlotTransforms
void RecalculatePlotTransforms()
Recalculate the necessary transforms.
vtkSmartPointer.h
vtkChartXY::GetAxis
vtkAxis * GetAxis(int axisIndex) override
Get the axis specified by axisIndex.
vtkChartXY::RemovePlot
bool RemovePlot(vtkIdType index) override
Remove the plot at the specified index, returns true if successful, false if the index was invalid.
vtkChartXY::MouseMoveEvent
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
vtkContextPolygon
Definition: vtkContextPolygon.h:27
vtkChartXY::GetLegendBorder
virtual int GetLegendBorder(vtkContext2D *painter, int axisPosition)
Layout for the legend if it is visible.
vtkChartXY::ClearPlots
void ClearPlots() override
Remove all plots from the chart.
vtkChartPlotData::ScreenPosition
vtkVector2i ScreenPosition
Definition: vtkChartXY.h:531
vtkChartXY::HiddenAxisBorder
int HiddenAxisBorder
Size of the border when an axis is hidden.
Definition: vtkChartXY.h:440
vtkChartXY::RemovePlotSelections
void RemovePlotSelections()
Remove all the selection from Plots.
vtkAxis
takes care of drawing 2D axes
Definition: vtkAxis.h:72
vtkChartXY::SetTooltipInfo
virtual void SetTooltipInfo(const vtkContextMouseEvent &, const vtkVector2d &, vtkIdType, vtkPlot *, vtkIdType segmentIndex=-1)
Set the information passed to the tooltip.
vtkChartPlotData::Position
vtkVector2f Position
Definition: vtkChartXY.h:530
vtkChartXY::SelectionPolygon
vtkContextPolygon SelectionPolygon
The polygon created as the mouse is dragged around the screen when in polygonal selection mode.
Definition: vtkChartXY.h:413
vtkChartXY::UpdateLayout
virtual bool UpdateLayout(vtkContext2D *painter)
Update the layout of the chart, this may require the vtkContext2D in order to get font metrics etc.
vtkVector2i
Some derived classes for the different vectors commonly used.
Definition: vtkVector.h:409
vtkChartPlotData::Index
int Index
Definition: vtkChartXY.h:532
vtkChartXY::SetAxis
virtual void SetAxis(int axisIndex, vtkAxis *) override
Set the axis specified by axisIndex.
vtkChartXY
Factory class for drawing XY charts.
Definition: vtkChartXY.h:50
vtkStdString
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:41
vtkChartXY::GetPlotCorner
int GetPlotCorner(vtkPlot *plot)
Figure out which quadrant the plot is in.
vtkChartXY::DrawSelectionPolygon
bool DrawSelectionPolygon
Should the selection polygon be drawn.
Definition: vtkChartXY.h:418
vtkChartXY::AddPlot
vtkPlot * AddPlot(int type) override
Add a plot to the chart, defaults to using the name of the y column.
vtkChartXY::RecalculateBounds
void RecalculateBounds() override
Request that the chart recalculates the range of its axes.
vtkChartXY::DrawBox
bool DrawBox
Should the box be drawn (could be selection, zoom etc).
Definition: vtkChartXY.h:407
vtkX3D::index
@ index
Definition: vtkX3D.h:246
vtkChartXY::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkRectf
Definition: vtkRect.h:333
vtkVector2f
Definition: vtkVector.h:419
vtkChartXY::StackPlotUnder
virtual vtkIdType StackPlotUnder(vtkPlot *plot, vtkPlot *above)
Lowers the plot under the above plot.
vtkChartXY::SetPlotCorner
void SetPlotCorner(vtkPlot *plot, int corner)
Figure out which quadrant the plot is in.
vtkChartXY::vtkChartXY
vtkChartXY()
vtkChartXY::Paint
bool Paint(vtkContext2D *painter) override
Paint event for the chart, called whenever the chart needs to be drawn.
vtkChartXY::SetTooltip
virtual void SetTooltip(vtkTooltipItem *tooltip)
Set the vtkTooltipItem object that will be displayed by the chart.