VTK
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 
26 #ifndef vtkChartXYZ_h
27 #define vtkChartXYZ_h
28 
29 #include "vtkChartsCoreModule.h" // For export macro
30 #include "vtkContextItem.h"
31 #include "vtkColor.h" // For vtkColor4ub
32 #include "vtkRect.h" // For vtkRectf ivars
33 #include "vtkNew.h" // For ivars
34 #include "vtkSmartPointer.h" // For ivars
35 #include <vector> // For ivars
36 
37 class vtkAnnotationLink;
38 class vtkAxis;
39 class vtkContext3D;
41 class vtkPen;
42 class vtkPlaneCollection;
43 class vtkPlot3D;
44 class vtkTable;
45 class vtkTransform;
47 
48 class VTKCHARTSCORE_EXPORT vtkChartXYZ : public vtkContextItem
49 {
50 public:
51  vtkTypeMacro(vtkChartXYZ, vtkContextItem);
52  virtual void PrintSelf(ostream &os, vtkIndent indent);
53 
54  static vtkChartXYZ * New();
55 
62  void SetGeometry(const vtkRectf &bounds);
63 
67  void SetAngle(double angle);
68 
72  void SetAroundX(bool isX);
73 
77  virtual void SetAnnotationLink(vtkAnnotationLink *link);
78 
82  vtkAxis * GetAxis(int axis);
83 
85 
91 
96  void SetAutoRotate(bool b);
97 
102  void SetDecorateAxes(bool b);
103 
108  void SetFitToScene(bool b);
109 
113  virtual void Update();
114 
118  virtual bool Paint(vtkContext2D *painter);
119 
123  virtual vtkIdType AddPlot(vtkPlot3D* plot);
124 
128  void ClearPlots();
129 
135 
142 
146  virtual bool Hit(const vtkContextMouseEvent &mouse);
147 
151  virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse);
152 
156  virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse);
157 
161  virtual bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta);
162 
168  virtual bool KeyPressEvent(const vtkContextKeyEvent &key);
169 
170 protected:
173 
179  virtual void CalculateTransforms();
180 
188  vtkTransform *transform);
189 
193  bool Rotate(const vtkContextMouseEvent &mouse);
194 
198  bool Pan(const vtkContextMouseEvent &mouse);
199 
203  bool Zoom(const vtkContextMouseEvent &mouse);
204 
208  bool Spin(const vtkContextMouseEvent &mouse);
209 
213  void LookDownX();
214 
218  void LookDownY();
219 
223  void LookDownZ();
224 
228  void LookUpX();
229 
233  void LookUpY();
234 
238  void LookUpZ();
239 
244 
248  void RescaleAxes();
249 
253  void ScaleUpAxes();
254 
259 
263  void ZoomAxes(int delta);
264 
270 
281 
286 
290  void DrawAxes(vtkContext3D *context);
291 
297 
301  void DrawTickMarks(vtkContext2D *painter);
302 
306  void DrawAxesLabels(vtkContext2D *painter);
307 
313  void GetOffsetForAxisLabel(int axis, float *bounds, float *offset);
314 
320  double CalculateNiceMinMax(double &min, double &max, int axis);
321 
325  void GetClippingPlaneEquation(int i, double *planeEquation);
326 
331 
335  std::vector< vtkSmartPointer<vtkAxis> > Axes;
336 
342 
347  bool IsX;
348 
353  double Angle;
354 
360 
366 
371 
378 
383 
388 
394 
400 
406 
413 
418 
423 
428 
433 
437  std::vector<vtkPlot3D *> Plots;
438 
443 
448 
453 
458 
463  float AxesBoundaryPoints[14][3];
464 
469  float TickLabelOffset[3][2];
470 
475 
480 
482 
485  int XAxisToLabel[3];
486  int YAxisToLabel[3];
487  int ZAxisToLabel[3];
489 
493  int DirectionToData[3];
494 
498  double DataBounds[4];
499 
500 private:
501  vtkChartXYZ(const vtkChartXYZ &) VTK_DELETE_FUNCTION;
502  void operator=(const vtkChartXYZ &) VTK_DELETE_FUNCTION;
503 };
504 
505 #endif
takes care of drawing 2D axes
Definition: vtkAxis.h:72
Factory class for drawing 3D XYZ charts.
Definition: vtkChartXYZ.h:49
std::vector< vtkPlot3D * > Plots
The plots that are drawn within this chart.
Definition: vtkChartXYZ.h:437
bool AutoRotate
This boolean indicates whether or not we're using this chart to rotate on a timer.
Definition: vtkChartXYZ.h:341
vtkNew< vtkTransform > FutureBoxScale
This transform keeps track of the Scale of the FutureBox transform.
Definition: vtkChartXYZ.h:417
vtkNew< vtkTransform > FutureBox
This transform is initialized as a copy of Box.
Definition: vtkChartXYZ.h:412
std::string XAxisLabel
The label for the X Axis.
Definition: vtkChartXYZ.h:442
void ScaleDownAxes()
Scale down the axes when the scene gets smaller.
bool FitToScene
This boolean indicates whether or not we should automatically resize the chart so that it snugly fill...
Definition: vtkChartXYZ.h:365
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:382
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:422
int SceneHeight
The height of the scene, as of the most recent call to Paint().
Definition: vtkChartXYZ.h:474
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:330
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:447
void SetAutoRotate(bool b)
Set whether or not we're using this chart to rotate on a timer.
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:399
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:457
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:387
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:427
virtual bool Paint(vtkContext2D *painter)
Paint event for the chart, called whenever the chart needs to be drawn.
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:405
std::string ZAxisLabel
The label for the Z Axis.
Definition: vtkChartXYZ.h:452
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.
virtual bool MouseWheelEvent(const vtkContextMouseEvent &mouse, int delta)
Mouse wheel event.
void DetermineWhichAxesToLabel()
For each of the XYZ dimensions, find the axis line that is furthest from the rendered data.
vtkNew< vtkTransform > ContextTransform
This is the transform that is applied when rendering data from the plots.
Definition: vtkChartXYZ.h:370
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:359
vtkSmartPointer< vtkAnnotationLink > Link
This link is used to share selected points with other classes.
Definition: vtkChartXYZ.h:432
virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse)
Mouse move event.
std::vector< vtkSmartPointer< vtkAxis > > Axes
The 3 axes of this chart.
Definition: vtkChartXYZ.h:335
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.
virtual bool Hit(const vtkContextMouseEvent &mouse)
Returns true if the transform is interactive, false otherwise.
virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse)
Mouse press event.
virtual bool KeyPressEvent(const vtkContextKeyEvent &key)
Key press event.
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:393
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:377
bool CheckForSceneResize()
Check to see if the scene changed size since the last render.
void InitializeAxesBoundaryPoints()
Initialize a list of "test points".
vtkColor4ub GetAxisColor()
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:353
void SetGeometry(const vtkRectf &bounds)
Set the geometry in pixel coordinates (origin and width/height).
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.
virtual void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
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 LookDownY()
Adjust the rotation of the chart so that we are looking down the Y axis.
virtual void Update()
Perform any updates to the item that may be necessary before rendering.
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:479
virtual vtkIdType AddPlot(vtkPlot3D *plot)
Adds a plot to the chart.
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:347
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:58
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:40
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:40
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:69
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
dynamic, self-adjusting array of unsigned char
@ key
Definition: vtkX3D.h:257
@ color
Definition: vtkX3D.h:221
@ offset
Definition: vtkX3D.h:438
@ string
Definition: vtkX3D.h:490
int vtkIdType
Definition: vtkType.h:287
#define max(a, b)