VTK  9.0.3
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 
23 #ifndef vtkChartXYZ_h
24 #define vtkChartXYZ_h
25 
26 #include "vtkChartsCoreModule.h" // For export macro
27 #include "vtkColor.h" // For vtkColor4ub
28 #include "vtkContextItem.h"
29 #include "vtkNew.h" // For ivars
30 #include "vtkRect.h" // For vtkRectf ivars
31 #include "vtkSmartPointer.h" // For ivars
32 #include <vector> // For ivars
33 
34 class vtkAnnotationLink;
35 class vtkAxis;
36 class vtkContext3D;
38 class vtkPen;
39 class vtkPlaneCollection;
40 class vtkPlot3D;
41 class vtkTable;
42 class vtkTransform;
44 
45 class VTKCHARTSCORE_EXPORT vtkChartXYZ : public vtkContextItem
46 {
47 public:
48  vtkTypeMacro(vtkChartXYZ, vtkContextItem);
49  void PrintSelf(ostream& os, vtkIndent indent) override;
50 
51  static vtkChartXYZ* New();
52 
59  void SetGeometry(const vtkRectf& bounds);
60 
64  void SetAngle(double angle);
65 
69  void SetAroundX(bool isX);
70 
74  virtual void SetAnnotationLink(vtkAnnotationLink* link);
75 
79  vtkAxis* GetAxis(int axis);
80 
84  virtual void SetAxis(int axisIndex, vtkAxis* axis);
85 
87 
93 
98  void SetAutoRotate(bool b);
99 
104  void SetDecorateAxes(bool b);
105 
110  void SetFitToScene(bool b);
111 
115  void Update() override;
116 
120  bool Paint(vtkContext2D* painter) override;
121 
125  virtual vtkIdType AddPlot(vtkPlot3D* plot);
126 
130  void ClearPlots();
131 
137 
144 
148  bool Hit(const vtkContextMouseEvent& mouse) override;
149 
153  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
154 
158  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
159 
163  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
164 
170  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
171 
172 protected:
174  ~vtkChartXYZ() override;
175 
181  virtual void CalculateTransforms();
182 
190 
194  bool Rotate(const vtkContextMouseEvent& mouse);
195 
199  bool Pan(const vtkContextMouseEvent& mouse);
200 
204  bool Zoom(const vtkContextMouseEvent& mouse);
205 
209  bool Spin(const vtkContextMouseEvent& mouse);
210 
214  void LookDownX();
215 
219  void LookDownY();
220 
224  void LookDownZ();
225 
229  void LookUpX();
230 
234  void LookUpY();
235 
239  void LookUpZ();
240 
245 
249  void RescaleAxes();
250 
254  void ScaleUpAxes();
255 
260 
264  void ZoomAxes(int delta);
265 
271 
282 
287 
291  void DrawAxes(vtkContext3D* context);
292 
298 
302  void DrawTickMarks(vtkContext2D* painter);
303 
307  void DrawAxesLabels(vtkContext2D* painter);
308 
314  void GetOffsetForAxisLabel(int axis, float* bounds, float* offset);
315 
321  double CalculateNiceMinMax(double& min, double& max, int axis);
322 
326  void GetClippingPlaneEquation(int i, double* planeEquation);
327 
332 
336  std::vector<vtkSmartPointer<vtkAxis> > Axes;
337 
343 
348  bool IsX;
349 
354  double Angle;
355 
361 
367 
372 
379 
384 
389 
395 
401 
407 
414 
419 
424 
429 
434 
438  std::vector<vtkPlot3D*> Plots;
439 
444 
449 
454 
459 
464  float AxesBoundaryPoints[14][3];
465 
470  float TickLabelOffset[3][2];
471 
476 
481 
483 
486  int XAxisToLabel[3];
487  int YAxisToLabel[3];
488  int ZAxisToLabel[3];
490 
494  int DirectionToData[3];
495 
499  double DataBounds[4];
500 
501 private:
502  vtkChartXYZ(const vtkChartXYZ&) = delete;
503  void operator=(const vtkChartXYZ&) = delete;
504 };
505 
506 #endif
takes care of drawing 2D axes
Definition: vtkAxis.h:69
Factory class for drawing 3D XYZ charts.
Definition: vtkChartXYZ.h:46
~vtkChartXYZ() override
bool AutoRotate
This boolean indicates whether or not we're using this chart to rotate on a timer.
Definition: vtkChartXYZ.h:342
vtkNew< vtkTransform > FutureBoxScale
This transform keeps track of the Scale of the FutureBox transform.
Definition: vtkChartXYZ.h:418
vtkNew< vtkTransform > FutureBox
This transform is initialized as a copy of Box.
Definition: vtkChartXYZ.h:413
std::string XAxisLabel
The label for the X Axis.
Definition: vtkChartXYZ.h:443
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.
bool FitToScene
This boolean indicates whether or not we should automatically resize the chart so that it snugly fill...
Definition: vtkChartXYZ.h:366
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:383
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:423
int SceneHeight
The height of the scene, as of the most recent call to Paint().
Definition: vtkChartXYZ.h:475
void DrawAxesLabels(vtkContext2D *painter)
Label the axes.
void DrawTickMarks(vtkContext2D *painter)
Draw tick marks and tick mark labels along the axes.
static vtkChartXYZ * New()
vtkRectf Geometry
The size and position of this chart.
Definition: vtkChartXYZ.h:331
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:448
void SetAutoRotate(bool b)
Set whether or not we're using this chart to rotate on a timer.
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.
vtkAxis * GetAxis(int axis)
Get the x (0), y (1) or z (2) axis.
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:400
std::vector< vtkSmartPointer< vtkAxis > > Axes
The 3 axes of this chart.
Definition: vtkChartXYZ.h:336
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:458
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:388
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:428
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:406
std::string ZAxisLabel
The label for the Z Axis.
Definition: vtkChartXYZ.h:453
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.
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:438
vtkNew< vtkTransform > ContextTransform
This is the transform that is applied when rendering data from the plots.
Definition: vtkChartXYZ.h:371
void LookDownX()
Adjust the rotation of the chart so that we are looking down the X axis.
bool DrawAxesDecoration
This boolean indicates whether or not we should draw tick marks and axes labels.
Definition: vtkChartXYZ.h:360
vtkSmartPointer< vtkAnnotationLink > Link
This link is used to share selected points with other classes.
Definition: vtkChartXYZ.h:433
void SetAroundX(bool isX)
Set whether or not we're rotating about the X axis.
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:394
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:378
bool CheckForSceneResize()
Check to see if the scene changed size since the last render.
void InitializeAxesBoundaryPoints()
Initialize a list of "test points".
vtkColor4ub GetAxisColor()
bool KeyPressEvent(const vtkContextKeyEvent &key) override
Key press event.
void ScaleUpAxes()
Scale up the axes when the scene gets larger.
double Angle
When we're in AutoRotate mode, this value tells the chart how much it should be rotated.
Definition: vtkChartXYZ.h:354
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.
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.
bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta) override
Mouse wheel event.
bool MouseMoveEvent(const vtkContextMouseEvent &mouse) override
Mouse move event.
void LookDownY()
Adjust the rotation of the chart so that we are looking down the Y axis.
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:480
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.
bool Pan(const vtkContextMouseEvent &mouse)
Pan the data within the chart in response to a mouse movement.
bool IsX
When we're in AutoRotate mode, this boolean tells us if we should rotate about the X axis or the Y ax...
Definition: vtkChartXYZ.h:348
void SetAngle(double angle)
Set the rotation angle for the chart (AutoRotate mode only).
Class for drawing 2D primitives to a graphical context.
Definition: vtkContext2D.h:53
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:41
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:34
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:37
maintain a list of planes
Abstract class for 3D plots.
Definition: vtkPlot3D.h:45
A table, which contains similar-typed columns of data.
Definition: vtkTable.h:63
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:55
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:338
#define max(a, b)