VTK  9.2.5
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 
55 #ifndef vtkChartXYZ_h
56 #define vtkChartXYZ_h
57 
58 #include "vtkChartsCoreModule.h" // For export macro
59 #include "vtkColor.h" // For vtkColor4ub
60 #include "vtkContextItem.h"
61 #include "vtkNew.h" // For ivars
62 #include "vtkRect.h" // For vtkRectf ivars
63 #include "vtkSmartPointer.h" // For ivars
64 #include "vtkStdString.h" // For vtkStdString
65 #include "vtkTextProperty.h" // For axes text properties
66 #include <vector> // For ivars
67 
68 class vtkAnnotationLink;
69 class vtkAxis;
70 class vtkContext3D;
72 class vtkPen;
73 class vtkPlaneCollection;
74 class vtkPlot3D;
75 class vtkTable;
76 class vtkTransform;
78 
79 class VTKCHARTSCORE_EXPORT vtkChartXYZ : public vtkContextItem
80 {
81 public:
82  vtkTypeMacro(vtkChartXYZ, vtkContextItem);
83  void PrintSelf(ostream& os, vtkIndent indent) override;
84 
85  static vtkChartXYZ* New();
86 
96  void SetGeometry(const vtkRectf& bounds);
97 
105  void SetMargins(const vtkVector4i& margins);
106 
110  vtkSetMacro(Angle, double);
111 
115  void SetAroundX(bool isX);
116 
121 
125  vtkAxis* GetAxis(int axis);
126 
130  virtual void SetAxis(int axisIndex, vtkAxis* axis);
131 
133 
139 
160 
164  vtkSetMacro(XAxisLabel, vtkStdString);
165 
169  vtkSetMacro(YAxisLabel, vtkStdString);
170 
174  vtkSetMacro(ZAxisLabel, vtkStdString);
175 
181  vtkSetMacro(EnsureOuterEdgeAxisLabelling, bool);
182 
187  vtkSetMacro(AutoRotate, bool);
188 
193  void SetDecorateAxes(bool b);
194 
199  void SetFitToScene(bool b);
200 
204  void Update() override;
205 
209  bool Paint(vtkContext2D* painter) override;
210 
214  virtual vtkIdType AddPlot(vtkPlot3D* plot);
215 
219  virtual bool RemovePlot(vtkPlot3D* plot);
220 
224  void ClearPlots();
225 
231 
238 
242  bool Hit(const vtkContextMouseEvent& mouse) override;
243 
247  bool MouseButtonPressEvent(const vtkContextMouseEvent& mouse) override;
248 
252  bool MouseMoveEvent(const vtkContextMouseEvent& mouse) override;
253 
257  bool MouseWheelEvent(const vtkContextMouseEvent& mouse, int delta) override;
258 
264  bool KeyPressEvent(const vtkContextKeyEvent& key) override;
265 
270 
274  vtkGetMacro(ClippingPlanesEnabled, bool);
275 
279  vtkSetMacro(ScaleBoxWithPlot, bool);
280 
284  vtkGetMacro(ScaleBoxWithPlot, bool);
285 
286 protected:
288  ~vtkChartXYZ() override;
289 
294  {
297  UP,
298  DOWN
299  };
300 
305  {
311  STANDARD
312  };
313 
318  {
326  NORTH_WEST
327  };
328 
334  virtual void CalculateTransforms();
335 
343 
347  bool Rotate(const vtkContextMouseEvent& mouse);
348 
352  bool Rotate(const RotateDirection rotateDirection);
353 
357  bool Pan(const vtkContextMouseEvent& mouse);
358 
362  bool Zoom(const vtkContextMouseEvent& mouse);
363 
367  bool Spin(const vtkContextMouseEvent& mouse);
368 
372  void LookDownX();
373 
377  void LookDownY();
378 
382  void LookDownZ();
383 
387  void LookUpX();
388 
392  void LookUpY();
393 
397  void LookUpZ();
398 
403 
407  void RescaleAxes();
408 
412  void ScaleUpAxes();
413 
418 
422  void ZoomAxes(int delta);
423 
429 
440 
445 
449  void DrawAxes(vtkContext3D* context);
450 
456 
462 
471  void DrawTickMarks(vtkContext2D* painter);
472 
476  void DrawAxesLabels(vtkContext2D* painter);
477 
483  void GetOffsetForAxisLabel(int axis, float* bounds, float* offset);
484 
490  double CalculateNiceMinMax(double& min, double& max, int axis);
491 
495  void GetClippingPlaneEquation(int i, double* planeEquation);
496 
500  std::size_t GetMarginLeft() const;
501 
505  std::size_t GetMarginBottom() const;
506 
510  std::size_t GetPlotWidth() const;
511 
515  std::size_t GetPlotHeight() const;
516 
520  enum
521  {
523  USE_GEOMETRY
524  } SizeStrategy = USE_GEOMETRY;
525 
530  vtkVector4i Margins = vtkVector4i(40, 40, 40, 40);
531 
536  vtkRectf Geometry = vtkRectf(40, 40, 120, 120);
537 
541  std::vector<vtkSmartPointer<vtkAxis>> Axes;
542 
547  bool AutoRotate = false;
548 
553  bool IsX = false;
554 
559  double Angle = 0;
560 
565  bool DrawAxesDecoration = true;
566 
571  bool FitToScene = true;
572 
577 
584 
589 
594 
600 
606 
612 
619 
624 
629 
634 
639 
643  std::vector<vtkPlot3D*> Plots;
644 
648  std::vector<vtkIdType> FreePlaces;
649 
654 
659 
664 
669 
675  bool EnsureOuterEdgeAxisLabelling = false;
680 
685  float AxesBoundaryPoints[8][3];
686 
691  float TickLabelOffset[3][2];
692 
697 
702 
704 
707  int XAxisToLabel[3];
708  int YAxisToLabel[3];
709  int ZAxisToLabel[3];
711 
715  int DirectionToData[3];
716 
720  double DataBounds[4];
721 
725  bool ClippingPlanesEnabled = true;
726 
730  bool ScaleBoxWithPlot = true;
731 
732 private:
733  vtkChartXYZ(const vtkChartXYZ&) = delete;
734  void operator=(const vtkChartXYZ&) = delete;
735 };
736 
737 #endif
takes care of drawing 2D axes
Definition: vtkAxis.h:181
Factory class for drawing 3D XYZ charts.
Definition: vtkChartXYZ.h:80
~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:623
vtkNew< vtkTransform > FutureBox
This transform is initialized as a copy of Box.
Definition: vtkChartXYZ.h:618
std::string XAxisLabel
The label for the X Axis.
Definition: vtkChartXYZ.h:658
@ USE_MARGINS_AND_SCENE_SIZE
Definition: vtkChartXYZ.h:522
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:588
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:628
int SceneHeight
The height of the scene, as of the most recent call to Paint().
Definition: vtkChartXYZ.h:696
virtual bool RemovePlot(vtkPlot3D *plot)
Removes a plot from the chart.
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:294
bool Zoom(const vtkContextMouseEvent &mouse)
Zoom in or out on the data in response to a mouse movement.
vtkTextProperty * GetAxesTextProperty()
Get the text property for axes.
std::string YAxisLabel
The label for the Y Axis.
Definition: vtkChartXYZ.h:663
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:605
std::vector< vtkSmartPointer< vtkAxis > > Axes
The 3 axes of this chart.
Definition: vtkChartXYZ.h:541
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:679
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:593
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:633
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:611
std::string ZAxisLabel
The label for the Z Axis.
Definition: vtkChartXYZ.h:668
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:643
vtkNew< vtkTransform > ContextTransform
This is the transform that is applied when rendering data from the plots.
Definition: vtkChartXYZ.h:576
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:638
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:318
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:599
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:583
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:653
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:305
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:648
std::size_t GetPlotWidth() const
Gets the current width of the plot in pixels irrespective of the size-strategy used.
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:701
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:77
Class for drawing 3D primitives to a graphical context.
Definition: vtkContext3D.h:60
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:119
provides a pen that draws the outlines of shapes drawn by vtkContext2D.
Definition: vtkPen.h:139
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:108
A table, which contains similar-typed columns of data.
Definition: vtkTable.h:183
represent text properties.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:170
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)