VTK  9.2.6
vtkChartXYZ.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkChartXYZ.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
35#ifndef vtkChartXYZ_h
36#define vtkChartXYZ_h
37
38#include "vtkChartsCoreModule.h" // For export macro
39#include "vtkColor.h" // For vtkColor4ub
40#include "vtkContextItem.h"
41#include "vtkNew.h" // For ivars
42#include "vtkRect.h" // For vtkRectf ivars
43#include "vtkSmartPointer.h" // For ivars
44#include "vtkStdString.h" // For vtkStdString
45#include "vtkTextProperty.h" // For axes text properties
46#include <vector> // For ivars
47
49class vtkAxis;
50class vtkContext3D;
52class vtkPen;
54class vtkPlot3D;
55class vtkTable;
56class vtkTransform;
58
59class VTKCHARTSCORE_EXPORT vtkChartXYZ : public vtkContextItem
60{
61public:
63 void PrintSelf(ostream& os, vtkIndent indent) override;
64
65 static vtkChartXYZ* New();
66
76 void SetGeometry(const vtkRectf& bounds);
77
85 void SetMargins(const vtkVector4i& margins);
86
90 vtkSetMacro(Angle, double);
91
95 void SetAroundX(bool isX);
96
101
105 vtkAxis* GetAxis(int axis);
106
110 virtual void SetAxis(int axisIndex, vtkAxis* axis);
111
113
116 void SetAxisColor(const vtkColor4ub& color);
119
140
144 vtkSetMacro(XAxisLabel, vtkStdString);
145
149 vtkSetMacro(YAxisLabel, vtkStdString);
150
154 vtkSetMacro(ZAxisLabel, vtkStdString);
155
161 vtkSetMacro(EnsureOuterEdgeAxisLabelling, bool);
162
167 vtkSetMacro(AutoRotate, bool);
168
173 void SetDecorateAxes(bool b);
174
179 void SetFitToScene(bool b);
180
184 void Update() override;
185
189 bool Paint(vtkContext2D* painter) override;
190
195
199 virtual bool RemovePlot(vtkPlot3D* plot);
200
205
211
218
222 bool Hit(const vtkContextMouseEvent& mouse) override;
223
227 bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
228
232 bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
233
237 bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
238
244 bool KeyPressEvent(const vtkContextKeyEvent& key) override;
245
250
254 vtkGetMacro(ClippingPlanesEnabled, bool);
255
259 vtkSetMacro(ScaleBoxWithPlot, bool);
260
264 vtkGetMacro(ScaleBoxWithPlot, bool);
265
266protected:
268 ~vtkChartXYZ() override;
269
274 {
278 DOWN
279 };
280
285 {
291 STANDARD
292 };
293
298 {
306 NORTH_WEST
307 };
308
314 virtual void CalculateTransforms();
315
323
327 bool Rotate(const vtkContextMouseEvent& mouse);
328
332 bool Rotate(const RotateDirection rotateDirection);
333
337 bool Pan(const vtkContextMouseEvent& mouse);
338
342 bool Zoom(const vtkContextMouseEvent& mouse);
343
347 bool Spin(const vtkContextMouseEvent& mouse);
348
352 void LookDownX();
353
357 void LookDownY();
358
362 void LookDownZ();
363
367 void LookUpX();
368
372 void LookUpY();
373
377 void LookUpZ();
378
383
388
393
398
402 void ZoomAxes(int delta);
403
409
420
425
429 void DrawAxes(vtkContext3D* context);
430
436
442
452
457
463 void GetOffsetForAxisLabel(int axis, float* bounds, float* offset);
464
470 double CalculateNiceMinMax(double& min, double& max, int axis);
471
475 void GetClippingPlaneEquation(int i, double* planeEquation);
476
480 std::size_t GetMarginLeft() const;
481
485 std::size_t GetMarginBottom() const;
486
490 std::size_t GetPlotWidth() const;
491
495 std::size_t GetPlotHeight() const;
496
500 enum
501 {
503 USE_GEOMETRY
504 } SizeStrategy = USE_GEOMETRY;
505
510 vtkVector4i Margins = vtkVector4i(40, 40, 40, 40);
511
516 vtkRectf Geometry = vtkRectf(40, 40, 120, 120);
517
521 std::vector<vtkSmartPointer<vtkAxis>> Axes;
522
527 bool AutoRotate = false;
528
533 bool IsX = false;
534
539 double Angle = 0;
540
545 bool DrawAxesDecoration = true;
546
551 bool FitToScene = true;
552
557
564
569
574
580
586
592
599
604
609
614
619
623 std::vector<vtkPlot3D*> Plots;
624
628 std::vector<vtkIdType> FreePlaces;
629
634
638 std::string XAxisLabel;
639
643 std::string YAxisLabel;
644
648 std::string ZAxisLabel;
649
655 bool EnsureOuterEdgeAxisLabelling = false;
660
665 float AxesBoundaryPoints[8][3];
666
671 float TickLabelOffset[3][2];
672
677
682
684
687 int XAxisToLabel[3];
688 int YAxisToLabel[3];
689 int ZAxisToLabel[3];
691
695 int DirectionToData[3];
696
700 double DataBounds[4];
701
705 bool ClippingPlanesEnabled = true;
706
710 bool ScaleBoxWithPlot = true;
711
712private:
713 vtkChartXYZ(const vtkChartXYZ&) = delete;
714 void operator=(const vtkChartXYZ&) = delete;
715};
716
717#endif
takes care of drawing 2D axes
Definition vtkAxis.h:81
Factory class for drawing 3D XYZ charts.
Definition vtkChartXYZ.h:60
~vtkChartXYZ() override
void SetClippingPlanesEnabled(bool)
Hide data outside the box.
vtkNew< vtkTransform > FutureBoxScale
This transform keeps track of the Scale of the FutureBox transform.
vtkNew< vtkTransform > FutureBox
This transform is initialized as a copy of Box.
std::string XAxisLabel
The label for the X Axis.
@ USE_MARGINS_AND_SCENE_SIZE
void ScaleDownAxes()
Scale down the axes when the scene gets smaller.
bool Paint(vtkContext2D *painter) override
Paint event for the chart, called whenever the chart needs to be drawn.
void RescaleAxes()
Scale the axes up or down in response to a scene resize.
vtkNew< vtkTransform > Box
This is the transform that is applied when rendering data from the plots.
void SetAxisColor(const vtkColor4ub &color)
Set the color for the axes.
void LookUpX()
Adjust the rotation of the chart so that we are looking up the X axis.
vtkNew< vtkPen > Pen
This is the pen that is used to draw data from the plots.
int SceneHeight
The height of the scene, as of the most recent call to Paint().
virtual bool RemovePlot(vtkPlot3D *plot)
Removes a plot from the chart.
vtkAxis * GetAxis(int axis)
Get the x (0), y (1) or z (2) axis.
void DrawAxesLabels(vtkContext2D *painter)
Label the axes.
void DrawTickMarks(vtkContext2D *painter)
Draw tick marks and tick mark labels along the axes.
static vtkChartXYZ * New()
RotateDirection
Rotation directions.
bool Zoom(const vtkContextMouseEvent &mouse)
Zoom in or out on the data in response to a mouse movement.
std::string YAxisLabel
The label for the Y Axis.
void Update() override
Perform any updates to the item that may be necessary before rendering.
bool Rotate(const vtkContextMouseEvent &mouse)
Rotate the chart in response to a mouse movement.
double CalculateNiceMinMax(double &min, double &max, int axis)
Calculate the next "nicest" numbers above and below the current minimum.
vtkNew< vtkTransform > Scale
This transform keeps track of how the data points have been scaled (zoomed in or zoomed out) within t...
std::vector< vtkSmartPointer< vtkAxis > > Axes
The 3 axes of this chart.
bool Spin(const vtkContextMouseEvent &mouse)
Spin the chart in response to a mouse movement.
void GetClippingPlaneEquation(int i, double *planeEquation)
Get the equation for the ith face of our bounding cube.
vtkNew< vtkPlaneCollection > BoundingCube
The six planes that define the bounding cube of our 3D axes.
virtual void CalculateTransforms()
Calculate the transformation matrices used to draw data points and axes in the scene.
vtkNew< vtkTransform > Rotation
This transform keeps track of how the chart has been rotated.
void LegacyDetermineWhichAxesToLabel()
Old-style axis labelling, for compatibility; labelling may occur in less optimal places e....
void DrawAxes(vtkContext3D *context)
Draw the cube axes of this chart.
vtkNew< vtkPen > AxisPen
This is the pen that is used to draw the axes.
bool CalculatePlotTransform(vtkAxis *x, vtkAxis *y, vtkAxis *z, vtkTransform *transform)
Given the x, y and z vtkAxis, and a transform, calculate the transform that the points in a chart wou...
vtkNew< vtkTransform > BoxScale
This transform keeps track of how the axes have been scaled (zoomed in or zoomed out).
std::string ZAxisLabel
The label for the Z Axis.
void LookUpZ()
Adjust the rotation of the chart so that we are looking up the Z axis.
void GetOffsetForAxisLabel(int axis, float *bounds, float *offset)
Compute how some text should be offset from an axis.
void ClearPlots()
Remove all the plots from this chart.
std::size_t GetPlotHeight() const
Gets the current height of the plot in pixels irrespective of the size-strategy used.
void DetermineWhichAxesToLabel()
For each of the XYZ dimensions, find the axis line that is furthest from the rendered data.
std::vector< vtkPlot3D * > Plots
The plots that are drawn within this chart.
vtkNew< vtkTransform > ContextTransform
This is the transform that is applied when rendering data from the plots.
void LookDownX()
Adjust the rotation of the chart so that we are looking down the X axis.
vtkSmartPointer< vtkAnnotationLink > Link
This link is used to share selected points with other classes.
std::size_t GetMarginBottom() const
Gets the current margin top in pixels irrespective of the size-strategy used.
Direction
The direction to data from an axis.
void SetAroundX(bool isX)
Set whether or not we're rotating about the X axis.
void SetMargins(const vtkVector4i &margins)
Set the margins in pixels ordered top right bottom left The box will be drawn inside those margins,...
void ZoomAxes(int delta)
Change the scaling of the axes by a specified amount.
void LookUpY()
Adjust the rotation of the chart so that we are looking up the Y axis.
void SetDecorateAxes(bool b)
Set whether or not axes labels & tick marks should be drawn.
vtkNew< vtkTransform > Translation
This transform keeps track of how the data points have been panned within the chart.
void InitializeFutureBox()
Initialize the "future box" transform.
vtkNew< vtkTransform > PlotTransform
This transform translates and scales the plots' data points so that they appear within the axes of th...
bool CheckForSceneResize()
Check to see if the scene changed size since the last render.
void InitializeAxesBoundaryPoints()
Initialize a list of "test points".
vtkColor4ub GetAxisColor()
Set the color for the axes.
bool Rotate(const RotateDirection rotateDirection)
Rotate the chart in a specific direction.
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Key press event.
void ScaleUpAxes()
Scale up the axes when the scene gets larger.
void SetGeometry(const vtkRectf &bounds)
Set the geometry in pixel coordinates (origin and width/height).
virtual void SetAxis(int axisIndex, vtkAxis *axis)
Set the x (0), y (1) or z (2) axis.
void ComputeDataBounds()
Compute a bounding box for the data that is rendered within the axes.
void LookDownZ()
Adjust the rotation of the chart so that we are looking down the Z axis.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkNew< vtkTextProperty > AxesTextProperty
The text properties of the axes.
bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse) override
Mouse press event.
void RecalculateBounds()
Determine the XYZ bounds of the plots within this chart.
void SetFitToScene(bool b)
Set whether or not the chart should automatically resize itself to fill the scene.
void NewDetermineWhichAxesToLabel()
New style axis labelling, ensuring labelling is always at the edges of the chart in the most sensible...
bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta) override
Mouse wheel event.
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
AxisState
The state of an axis.
void LookDownY()
Adjust the rotation of the chart so that we are looking down the Y axis.
std::vector< vtkIdType > FreePlaces
These plots got removed (from Plots), try to reuse the free spot.
std::size_t GetPlotWidth() const
Gets the current width of the plot in pixels irrespective of the size-strategy used.
vtkTextProperty * GetAxesTextProperty()
Get the text property for axes.
virtual void SetAnnotationLink(vtkAnnotationLink *link)
Set the vtkAnnotationLink for the chart.
void RecalculateTransform()
Use this chart's Geometry to set the endpoints of its axes.
int SceneWidth
The weight of the scene, as of the most recent call to Paint().
virtual vtkIdType AddPlot(vtkPlot3D *plot)
Adds a plot to the chart.
bool Hit(const vtkContextMouseEvent &mouse) override
Returns true if the transform is interactive, false otherwise.
std::size_t GetMarginLeft() const
Gets the current margin left in pixels irrespective of the size-strategy used.
bool Pan(const vtkContextMouseEvent &mouse)
Pan the data within the chart in response to a mouse movement.
Class for drawing 2D primitives to a graphical context.
Class for drawing 3D primitives to a graphical context.
base class for items that are part of a vtkContextScene.
data structure to represent key events.
data structure to represent mouse events.
a simple class to control print indentation
Definition vtkIndent.h:49
Allocate and hold a VTK object.
Definition vtkNew.h:71
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition vtkPen.h:49
maintain a list of planes
Abstract class for 3D plots.
Definition vtkPlot3D.h:45
Hold a reference to a vtkObjectBase instance.
Wrapper around std::string to keep symbols short.
A table, which contains similar-typed columns of data.
Definition vtkTable.h:83
represent text properties.
describes linear transformations via a 4x4 matrix
dynamic, self-adjusting array of unsigned char
int vtkIdType
Definition vtkType.h:332
#define max(a, b)