VTK  9.1.0
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
32#ifndef vtkChartXYZ_h
33#define vtkChartXYZ_h
34
35#include "vtkChartsCoreModule.h" // For export macro
36#include "vtkColor.h" // For vtkColor4ub
37#include "vtkContextItem.h"
38#include "vtkNew.h" // For ivars
39#include "vtkRect.h" // For vtkRectf ivars
40#include "vtkSmartPointer.h" // For ivars
41#include "vtkStdString.h" // For vtkStdString
42#include "vtkTextProperty.h" // For axes text properties
43#include <vector> // For ivars
44
46class vtkAxis;
47class vtkContext3D;
49class vtkPen;
51class vtkPlot3D;
52class vtkTable;
53class vtkTransform;
55
56class VTKCHARTSCORE_EXPORT vtkChartXYZ : public vtkContextItem
57{
58public:
60 void PrintSelf(ostream& os, vtkIndent indent) override;
61
62 static vtkChartXYZ* New();
63
73 void SetGeometry(const vtkRectf& bounds);
74
82 void SetMargins(const vtkVector4i& margins);
83
87 vtkSetMacro(Angle, double);
88
92 void SetAroundX(bool isX);
93
98
102 vtkAxis* GetAxis(int axis);
103
107 virtual void SetAxis(int axisIndex, vtkAxis* axis);
108
110
116
137
141 vtkSetMacro(XAxisLabel, vtkStdString);
142
146 vtkSetMacro(YAxisLabel, vtkStdString);
147
151 vtkSetMacro(ZAxisLabel, vtkStdString);
152
158 vtkSetMacro(EnsureOuterEdgeAxisLabelling, bool);
159
164 vtkSetMacro(AutoRotate, bool);
165
170 void SetDecorateAxes(bool b);
171
176 void SetFitToScene(bool b);
177
181 void Update() override;
182
186 bool Paint(vtkContext2D* painter) override;
187
192
196 virtual bool RemovePlot(vtkPlot3D* plot);
197
202
208
215
219 bool Hit(const vtkContextMouseEvent& mouse) override;
220
224 bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
225
229 bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
230
234 bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
235
241 bool KeyPressEvent(const vtkContextKeyEvent& key) override;
242
247
251 vtkGetMacro(ClippingPlanesEnabled, bool);
252
256 vtkSetMacro(ScaleBoxWithPlot, bool);
257
261 vtkGetMacro(ScaleBoxWithPlot, bool);
262
263protected:
265 ~vtkChartXYZ() override;
266
271 {
275 DOWN
276 };
277
282 {
288 STANDARD
289 };
290
295 {
303 NORTH_WEST
304 };
305
311 virtual void CalculateTransforms();
312
320
324 bool Rotate(const vtkContextMouseEvent& mouse);
325
329 bool Rotate(const RotateDirection rotateDirection);
330
334 bool Pan(const vtkContextMouseEvent& mouse);
335
339 bool Zoom(const vtkContextMouseEvent& mouse);
340
344 bool Spin(const vtkContextMouseEvent& mouse);
345
349 void LookDownX();
350
354 void LookDownY();
355
359 void LookDownZ();
360
364 void LookUpX();
365
369 void LookUpY();
370
374 void LookUpZ();
375
380
385
390
395
399 void ZoomAxes(int delta);
400
406
417
422
426 void DrawAxes(vtkContext3D* context);
427
433
439
449
454
460 void GetOffsetForAxisLabel(int axis, float* bounds, float* offset);
461
467 double CalculateNiceMinMax(double& min, double& max, int axis);
468
472 void GetClippingPlaneEquation(int i, double* planeEquation);
473
477 std::size_t GetMarginLeft() const;
478
482 std::size_t GetMarginBottom() const;
483
487 std::size_t GetPlotWidth() const;
488
492 std::size_t GetPlotHeight() const;
493
497 enum
498 {
500 USE_GEOMETRY
501 } SizeStrategy = USE_GEOMETRY;
502
507 vtkVector4i Margins = vtkVector4i(40, 40, 40, 40);
508
513 vtkRectf Geometry = vtkRectf(40, 40, 120, 120);
514
518 std::vector<vtkSmartPointer<vtkAxis>> Axes;
519
524 bool AutoRotate = false;
525
530 bool IsX = false;
531
536 double Angle = 0;
537
542 bool DrawAxesDecoration = true;
543
548 bool FitToScene = true;
549
554
561
566
571
577
583
589
596
601
606
611
616
620 std::vector<vtkPlot3D*> Plots;
621
625 std::vector<vtkIdType> FreePlaces;
626
631
636
641
646
652 bool EnsureOuterEdgeAxisLabelling = false;
657
662 float AxesBoundaryPoints[8][3];
663
668 float TickLabelOffset[3][2];
669
674
679
681
684 int XAxisToLabel[3];
685 int YAxisToLabel[3];
686 int ZAxisToLabel[3];
688
692 int DirectionToData[3];
693
697 double DataBounds[4];
698
702 bool ClippingPlanesEnabled = true;
703
707 bool ScaleBoxWithPlot = true;
708
709private:
710 vtkChartXYZ(const vtkChartXYZ&) = delete;
711 void operator=(const vtkChartXYZ&) = delete;
712};
713
714#endif
takes care of drawing 2D axes
Definition: vtkAxis.h:78
Factory class for drawing 3D XYZ charts.
Definition: vtkChartXYZ.h:57
~vtkChartXYZ() override
void SetClippingPlanesEnabled(bool)
Hide data outside the box.
vtkNew< vtkTransform > FutureBoxScale
This transform keeps track of the Scale of the FutureBox transform.
Definition: vtkChartXYZ.h:600
vtkNew< vtkTransform > FutureBox
This transform is initialized as a copy of Box.
Definition: vtkChartXYZ.h:595
std::string XAxisLabel
The label for the X Axis.
Definition: vtkChartXYZ.h:635
@ USE_MARGINS_AND_SCENE_SIZE
Definition: vtkChartXYZ.h:499
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.
Definition: vtkChartXYZ.h:565
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.
Definition: vtkChartXYZ.h:605
int SceneHeight
The height of the scene, as of the most recent call to Paint().
Definition: vtkChartXYZ.h:673
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.
Definition: vtkChartXYZ.h:271
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.
Definition: vtkChartXYZ.h:640
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...
Definition: vtkChartXYZ.h:582
std::vector< vtkSmartPointer< vtkAxis > > Axes
The 3 axes of this chart.
Definition: vtkChartXYZ.h:518
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.
Definition: vtkChartXYZ.h:656
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.
Definition: vtkChartXYZ.h:570
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.
Definition: vtkChartXYZ.h:610
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).
Definition: vtkChartXYZ.h:588
std::string ZAxisLabel
The label for the Z Axis.
Definition: vtkChartXYZ.h:645
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.
Definition: vtkChartXYZ.h:620
vtkNew< vtkTransform > ContextTransform
This is the transform that is applied when rendering data from the plots.
Definition: vtkChartXYZ.h:553
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.
Definition: vtkChartXYZ.h:615
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.
Definition: vtkChartXYZ.h:295
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.
Definition: vtkChartXYZ.h:576
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...
Definition: vtkChartXYZ.h:560
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.
Definition: vtkChartXYZ.h:630
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.
Definition: vtkChartXYZ.h:282
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.
Definition: vtkChartXYZ.h:625
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().
Definition: vtkChartXYZ.h:678
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.
Definition: vtkContext2D.h:63
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:50
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:43
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:46
maintain a list of planes
Abstract class for 3D plots.
Definition: vtkPlot3D.h:45
Wrapper around std::string to keep symbols short.
Definition: vtkStdString.h:45
A table, which contains similar-typed columns of data.
Definition: vtkTable.h:72
represent text properties.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:64
dynamic, self-adjusting array of unsigned char
@ key
Definition: vtkX3D.h:263
@ color
Definition: vtkX3D.h:227
@ offset
Definition: vtkX3D.h:444
@ string
Definition: vtkX3D.h:496
int vtkIdType
Definition: vtkType.h:332
#define max(a, b)