You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
967 lines
25 KiB
C++
967 lines
25 KiB
C++
/*=========================================================================
|
|
Program: Visualization Toolkit
|
|
Module: vtkAxisActor.h
|
|
Language: C++
|
|
|
|
Copyright (c) 1993-2000 Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
=========================================================================*/
|
|
/**
|
|
* @class vtkAxisActor
|
|
* @brief Create an axis with tick marks and labels
|
|
*
|
|
* vtkAxisActor creates an axis with tick marks, labels, and/or a title,
|
|
* depending on the particular instance variable settings. It is assumed that
|
|
* the axes is part of a bounding box and is orthogonal to one of the
|
|
* coordinate axes. To use this class, you typically specify two points
|
|
* defining the start and end points of the line (xyz definition using
|
|
* vtkCoordinate class), the axis type (X, Y or Z), the axis location in
|
|
* relation to the bounding box, the bounding box, the number of labels, and
|
|
* the data range (min,max). You can also control what parts of the axis are
|
|
* visible including the line, the tick marks, the labels, and the title. It
|
|
* is also possible to control gridlines, and specify on which 'side' the
|
|
* tickmarks are drawn (again with respect to the underlying assumed
|
|
* bounding box). You can also specify the label format (a printf style format).
|
|
*
|
|
* This class decides how to locate the labels, and how to create reasonable
|
|
* tick marks and labels.
|
|
*
|
|
* Labels follow the camera so as to be legible from any viewpoint.
|
|
*
|
|
* The instance variables Point1 and Point2 are instances of vtkCoordinate.
|
|
* All calculations and references are in World Coordinates.
|
|
*
|
|
* @par Thanks:
|
|
* This class was written by:
|
|
* Hank Childs, Kathleen Bonnell, Amy Squillacote, Brad Whitlock,
|
|
* Eric Brugger, Claire Guilbaud, Nicolas Dolegieviez, Will Schroeder,
|
|
* Karthik Krishnan, Aashish Chaudhary, Philippe Pebay, David Gobbi,
|
|
* David Partyka, Utkarsh Ayachit David Cole, Francois Bertel, and Mark Olesen
|
|
* Part of this work was supported by CEA/DIF - Commissariat a l'Energie Atomique,
|
|
* Centre DAM Ile-De-France, BP12, F-91297 Arpajon, France.
|
|
*
|
|
* @sa
|
|
* vtkActor vtkVectorText vtkPolyDataMapper vtkAxisActor2D vtkCoordinate
|
|
*/
|
|
|
|
#ifndef vtkAxisActor_h
|
|
#define vtkAxisActor_h
|
|
|
|
#include "vtkActor.h"
|
|
#include "vtkRenderingAnnotationModule.h" // For export macro
|
|
|
|
class vtkAxisFollower;
|
|
class vtkCamera;
|
|
class vtkCoordinate;
|
|
class vtkFollower;
|
|
class vtkPoints;
|
|
class vtkPolyData;
|
|
class vtkPolyDataMapper;
|
|
class vtkProp3DAxisFollower;
|
|
class vtkProperty2D;
|
|
class vtkStringArray;
|
|
class vtkTextActor;
|
|
class vtkTextActor3D;
|
|
class vtkTextProperty;
|
|
class vtkVectorText;
|
|
|
|
class VTKRENDERINGANNOTATION_EXPORT vtkAxisActor : public vtkActor
|
|
{
|
|
public:
|
|
vtkTypeMacro(vtkAxisActor, vtkActor);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
|
|
/**
|
|
* Instantiate object.
|
|
*/
|
|
static vtkAxisActor* New();
|
|
|
|
//@{
|
|
/**
|
|
* Specify the position of the first point defining the axis.
|
|
*/
|
|
virtual vtkCoordinate* GetPoint1Coordinate();
|
|
virtual void SetPoint1(double x[3]) { this->SetPoint1(x[0], x[1], x[2]); }
|
|
virtual void SetPoint1(double x, double y, double z);
|
|
virtual double* GetPoint1();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the position of the second point defining the axis.
|
|
*/
|
|
virtual vtkCoordinate* GetPoint2Coordinate();
|
|
virtual void SetPoint2(double x[3]) { this->SetPoint2(x[0], x[1], x[2]); }
|
|
virtual void SetPoint2(double x, double y, double z);
|
|
virtual double* GetPoint2();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Specify the (min,max) axis range. This will be used in the generation
|
|
* of labels, if labels are visible.
|
|
*/
|
|
vtkSetVector2Macro(Range, double);
|
|
vtkGetVectorMacro(Range, double, 2);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set or get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax).
|
|
*/
|
|
void SetBounds(const double bounds[6]);
|
|
void SetBounds(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax);
|
|
double* GetBounds(void) VTK_SIZEHINT(6) override;
|
|
void GetBounds(double bounds[6]);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the format with which to print the labels on the axis.
|
|
*/
|
|
vtkSetStringMacro(LabelFormat);
|
|
vtkGetStringMacro(LabelFormat);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Render text as polygons (vtkVectorText) or as sprites (vtkTextActor3D).
|
|
* In 2D mode, the value is ignored and text is rendered as vtkTextActor.
|
|
* False(0) by default.
|
|
* See Also:
|
|
* GetUse2DMode(), SetUse2DMode
|
|
*/
|
|
vtkSetMacro(UseTextActor3D, int);
|
|
vtkGetMacro(UseTextActor3D, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the flag that controls whether the minor ticks are visible.
|
|
*/
|
|
vtkSetMacro(MinorTicksVisible, vtkTypeBool);
|
|
vtkGetMacro(MinorTicksVisible, vtkTypeBool);
|
|
vtkBooleanMacro(MinorTicksVisible, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the title of the axis actor,
|
|
*/
|
|
void SetTitle(const char* t);
|
|
vtkGetStringMacro(Title);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the common exponent of the labels values
|
|
*/
|
|
void SetExponent(const char* t);
|
|
vtkGetStringMacro(Exponent);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the size of the major tick marks
|
|
*/
|
|
vtkSetMacro(MajorTickSize, double);
|
|
vtkGetMacro(MajorTickSize, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the size of the major tick marks
|
|
*/
|
|
vtkSetMacro(MinorTickSize, double);
|
|
vtkGetMacro(MinorTickSize, double);
|
|
//@}
|
|
|
|
enum TickLocation
|
|
{
|
|
VTK_TICKS_INSIDE = 0,
|
|
VTK_TICKS_OUTSIDE = 1,
|
|
VTK_TICKS_BOTH = 2
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the location of the ticks.
|
|
* Inside: tick end toward positive direction of perpendicular axes.
|
|
* Outside: tick end toward negative direction of perpendicular axes.
|
|
*/
|
|
vtkSetClampMacro(TickLocation, int, VTK_TICKS_INSIDE, VTK_TICKS_BOTH);
|
|
vtkGetMacro(TickLocation, int);
|
|
//@}
|
|
|
|
void SetTickLocationToInside(void) { this->SetTickLocation(VTK_TICKS_INSIDE); }
|
|
void SetTickLocationToOutside(void) { this->SetTickLocation(VTK_TICKS_OUTSIDE); }
|
|
void SetTickLocationToBoth(void) { this->SetTickLocation(VTK_TICKS_BOTH); }
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis line.
|
|
*/
|
|
vtkSetMacro(AxisVisibility, vtkTypeBool);
|
|
vtkGetMacro(AxisVisibility, vtkTypeBool);
|
|
vtkBooleanMacro(AxisVisibility, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis major tick marks.
|
|
*/
|
|
vtkSetMacro(TickVisibility, vtkTypeBool);
|
|
vtkGetMacro(TickVisibility, vtkTypeBool);
|
|
vtkBooleanMacro(TickVisibility, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis labels.
|
|
*/
|
|
vtkSetMacro(LabelVisibility, vtkTypeBool);
|
|
vtkGetMacro(LabelVisibility, vtkTypeBool);
|
|
vtkBooleanMacro(LabelVisibility, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis title.
|
|
*/
|
|
vtkSetMacro(TitleVisibility, vtkTypeBool);
|
|
vtkGetMacro(TitleVisibility, vtkTypeBool);
|
|
vtkBooleanMacro(TitleVisibility, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis detached exponent.
|
|
*/
|
|
vtkSetMacro(ExponentVisibility, bool);
|
|
vtkGetMacro(ExponentVisibility, bool);
|
|
vtkBooleanMacro(ExponentVisibility, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get visibility of the axis detached exponent.
|
|
*/
|
|
vtkSetMacro(LastMajorTickPointCorrection, bool);
|
|
vtkGetMacro(LastMajorTickPointCorrection, bool);
|
|
vtkBooleanMacro(LastMajorTickPointCorrection, bool);
|
|
//@}
|
|
|
|
enum AlignLocation
|
|
{
|
|
VTK_ALIGN_TOP = 0,
|
|
VTK_ALIGN_BOTTOM = 1,
|
|
VTK_ALIGN_POINT1 = 2,
|
|
VTK_ALIGN_POINT2 = 3
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set the alignment of the title related to the axis.
|
|
* Possible Alignment: VTK_ALIGN_TOP, VTK_ALIGN_BOTTOM, VTK_ALIGN_POINT1, VTK_ALIGN_POINT2
|
|
*/
|
|
virtual void SetTitleAlignLocation(int location);
|
|
vtkGetMacro(TitleAlignLocation, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set the location of the Detached Exponent related to the axis.
|
|
* Possible Location: VTK_ALIGN_TOP, VTK_ALIGN_BOTTOM, VTK_ALIGN_POINT1, VTK_ALIGN_POINT2
|
|
*/
|
|
virtual void SetExponentLocation(int location);
|
|
vtkGetMacro(ExponentLocation, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the axis title text property.
|
|
*/
|
|
virtual void SetTitleTextProperty(vtkTextProperty* p);
|
|
vtkGetObjectMacro(TitleTextProperty, vtkTextProperty);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the axis labels text property.
|
|
*/
|
|
virtual void SetLabelTextProperty(vtkTextProperty* p);
|
|
vtkGetObjectMacro(LabelTextProperty, vtkTextProperty);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set axis actor property (axis and its ticks) (kept for compatibility)
|
|
*/
|
|
void SetAxisLinesProperty(vtkProperty*);
|
|
vtkProperty* GetAxisLinesProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set main line axis actor property
|
|
*/
|
|
void SetAxisMainLineProperty(vtkProperty*);
|
|
vtkProperty* GetAxisMainLineProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set axis actor property (axis and its ticks)
|
|
*/
|
|
void SetAxisMajorTicksProperty(vtkProperty*);
|
|
vtkProperty* GetAxisMajorTicksProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set axis actor property (axis and its ticks)
|
|
*/
|
|
void SetAxisMinorTicksProperty(vtkProperty*);
|
|
vtkProperty* GetAxisMinorTicksProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set gridlines actor property (outer grid lines)
|
|
*/
|
|
void SetGridlinesProperty(vtkProperty*);
|
|
vtkProperty* GetGridlinesProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set inner gridlines actor property
|
|
*/
|
|
void SetInnerGridlinesProperty(vtkProperty*);
|
|
vtkProperty* GetInnerGridlinesProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get/Set gridPolys actor property (grid quads)
|
|
*/
|
|
void SetGridpolysProperty(vtkProperty*);
|
|
vtkProperty* GetGridpolysProperty();
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether gridlines should be drawn.
|
|
*/
|
|
vtkSetMacro(DrawGridlines, vtkTypeBool);
|
|
vtkGetMacro(DrawGridlines, vtkTypeBool);
|
|
vtkBooleanMacro(DrawGridlines, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether ONLY the gridlines should be drawn.
|
|
* This will only draw GridLines and will skip any other part of the rendering
|
|
* such as Axis/Tick/Title/...
|
|
*/
|
|
vtkSetMacro(DrawGridlinesOnly, vtkTypeBool);
|
|
vtkGetMacro(DrawGridlinesOnly, vtkTypeBool);
|
|
vtkBooleanMacro(DrawGridlinesOnly, vtkTypeBool);
|
|
//@}
|
|
|
|
vtkSetMacro(DrawGridlinesLocation, int);
|
|
vtkGetMacro(DrawGridlinesLocation, int);
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether inner gridlines should be drawn.
|
|
*/
|
|
vtkSetMacro(DrawInnerGridlines, vtkTypeBool);
|
|
vtkGetMacro(DrawInnerGridlines, vtkTypeBool);
|
|
vtkBooleanMacro(DrawInnerGridlines, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the length to use when drawing gridlines.
|
|
*/
|
|
vtkSetMacro(GridlineXLength, double);
|
|
vtkGetMacro(GridlineXLength, double);
|
|
vtkSetMacro(GridlineYLength, double);
|
|
vtkGetMacro(GridlineYLength, double);
|
|
vtkSetMacro(GridlineZLength, double);
|
|
vtkGetMacro(GridlineZLength, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether gridpolys should be drawn.
|
|
*/
|
|
vtkSetMacro(DrawGridpolys, vtkTypeBool);
|
|
vtkGetMacro(DrawGridpolys, vtkTypeBool);
|
|
vtkBooleanMacro(DrawGridpolys, vtkTypeBool);
|
|
//@}
|
|
|
|
enum AxisType
|
|
{
|
|
VTK_AXIS_TYPE_X = 0,
|
|
VTK_AXIS_TYPE_Y = 1,
|
|
VTK_AXIS_TYPE_Z = 2
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the type of this axis.
|
|
*/
|
|
vtkSetClampMacro(AxisType, int, VTK_AXIS_TYPE_X, VTK_AXIS_TYPE_Z);
|
|
vtkGetMacro(AxisType, int);
|
|
void SetAxisTypeToX(void) { this->SetAxisType(VTK_AXIS_TYPE_X); }
|
|
void SetAxisTypeToY(void) { this->SetAxisType(VTK_AXIS_TYPE_Y); }
|
|
void SetAxisTypeToZ(void) { this->SetAxisType(VTK_AXIS_TYPE_Z); }
|
|
//@}
|
|
|
|
enum AxisPosition
|
|
{
|
|
VTK_AXIS_POS_MINMIN = 0,
|
|
VTK_AXIS_POS_MINMAX = 1,
|
|
VTK_AXIS_POS_MAXMAX = 2,
|
|
VTK_AXIS_POS_MAXMIN = 3
|
|
};
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get The type of scale, enable logarithmic scale or linear by default
|
|
*/
|
|
vtkSetMacro(Log, bool);
|
|
vtkGetMacro(Log, bool);
|
|
vtkBooleanMacro(Log, bool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the position of this axis (in relation to an an
|
|
* assumed bounding box). For an x-type axis, MINMIN corresponds
|
|
* to the x-edge in the bounding box where Y values are minimum and
|
|
* Z values are minimum. For a y-type axis, MAXMIN corresponds to the
|
|
* y-edge where X values are maximum and Z values are minimum.
|
|
*/
|
|
vtkSetClampMacro(AxisPosition, int, VTK_AXIS_POS_MINMIN, VTK_AXIS_POS_MAXMIN);
|
|
vtkGetMacro(AxisPosition, int);
|
|
//@}
|
|
|
|
void SetAxisPositionToMinMin(void) { this->SetAxisPosition(VTK_AXIS_POS_MINMIN); }
|
|
void SetAxisPositionToMinMax(void) { this->SetAxisPosition(VTK_AXIS_POS_MINMAX); }
|
|
void SetAxisPositionToMaxMax(void) { this->SetAxisPosition(VTK_AXIS_POS_MAXMAX); }
|
|
void SetAxisPositionToMaxMin(void) { this->SetAxisPosition(VTK_AXIS_POS_MAXMIN); }
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the camera for this axis. The camera is used by the
|
|
* labels to 'follow' the camera and be legible from any viewpoint.
|
|
*/
|
|
virtual void SetCamera(vtkCamera*);
|
|
vtkGetObjectMacro(Camera, vtkCamera);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Draw the axis.
|
|
*/
|
|
int RenderOpaqueGeometry(vtkViewport* viewport) override;
|
|
virtual int RenderTranslucentGeometry(vtkViewport* viewport);
|
|
int RenderTranslucentPolygonalGeometry(vtkViewport* viewport) override;
|
|
int RenderOverlay(vtkViewport* viewport) override;
|
|
vtkTypeBool HasTranslucentPolygonalGeometry() override;
|
|
//@}
|
|
|
|
/**
|
|
* Release any graphics resources that are being consumed by this actor.
|
|
* The parameter window could be used to determine which graphic
|
|
* resources to release.
|
|
*/
|
|
void ReleaseGraphicsResources(vtkWindow*) override;
|
|
|
|
double ComputeMaxLabelLength(const double[3]);
|
|
double ComputeTitleLength(const double[3]);
|
|
|
|
void SetLabelScale(const double scale);
|
|
void SetLabelScale(int labelIndex, const double scale);
|
|
void SetTitleScale(const double scale);
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the starting position for minor and major tick points,
|
|
* and the delta values that determine their spacing.
|
|
*/
|
|
vtkSetMacro(MinorStart, double);
|
|
vtkGetMacro(MinorStart, double);
|
|
double GetMajorStart(int axis);
|
|
void SetMajorStart(int axis, double value);
|
|
// vtkSetMacro(MajorStart, double);
|
|
// vtkGetMacro(MajorStart, double);
|
|
vtkSetMacro(DeltaMinor, double);
|
|
vtkGetMacro(DeltaMinor, double);
|
|
double GetDeltaMajor(int axis);
|
|
void SetDeltaMajor(int axis, double value);
|
|
// vtkSetMacro(DeltaMajor, double);
|
|
// vtkGetMacro(DeltaMajor, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the starting position for minor and major tick points on
|
|
* the range and the delta values that determine their spacing. The
|
|
* range and the position need not be identical. ie the displayed
|
|
* values need not match the actual positions in 3D space.
|
|
*/
|
|
vtkSetMacro(MinorRangeStart, double);
|
|
vtkGetMacro(MinorRangeStart, double);
|
|
vtkSetMacro(MajorRangeStart, double);
|
|
vtkGetMacro(MajorRangeStart, double);
|
|
vtkSetMacro(DeltaRangeMinor, double);
|
|
vtkGetMacro(DeltaRangeMinor, double);
|
|
vtkSetMacro(DeltaRangeMajor, double);
|
|
vtkGetMacro(DeltaRangeMajor, double);
|
|
//@}
|
|
|
|
void SetLabels(vtkStringArray* labels);
|
|
|
|
void BuildAxis(vtkViewport* viewport, bool);
|
|
|
|
//@{
|
|
/**
|
|
* Get title actor and it is responsible for drawing
|
|
* title text.
|
|
*/
|
|
vtkGetObjectMacro(TitleActor, vtkAxisFollower);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get exponent follower actor
|
|
*/
|
|
vtkGetObjectMacro(ExponentActor, vtkAxisFollower);
|
|
//@}
|
|
|
|
/**
|
|
* Get label actors responsigle for drawing label text.
|
|
*/
|
|
inline vtkAxisFollower** GetLabelActors() { return this->LabelActors; }
|
|
|
|
//@{
|
|
/**
|
|
* Get title actor and it is responsible for drawing
|
|
* title text.
|
|
*/
|
|
vtkGetObjectMacro(TitleProp3D, vtkProp3DAxisFollower);
|
|
//@}
|
|
|
|
/**
|
|
* Get label actors responsigle for drawing label text.
|
|
*/
|
|
inline vtkProp3DAxisFollower** GetLabelProps3D() { return this->LabelProps3D; }
|
|
|
|
//@{
|
|
/**
|
|
* Get title actor and it is responsible for drawing
|
|
* title text.
|
|
*/
|
|
vtkGetObjectMacro(ExponentProp3D, vtkProp3DAxisFollower);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Get total number of labels built. Once built
|
|
* this count does not change.
|
|
*/
|
|
vtkGetMacro(NumberOfLabelsBuilt, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get flag whether to calculate title offset.
|
|
* Default is true.
|
|
*/
|
|
vtkSetMacro(CalculateTitleOffset, vtkTypeBool);
|
|
vtkGetMacro(CalculateTitleOffset, vtkTypeBool);
|
|
vtkBooleanMacro(CalculateTitleOffset, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get flag whether to calculate label offset.
|
|
* Default is true.
|
|
*/
|
|
vtkSetMacro(CalculateLabelOffset, vtkTypeBool);
|
|
vtkGetMacro(CalculateLabelOffset, vtkTypeBool);
|
|
vtkBooleanMacro(CalculateLabelOffset, vtkTypeBool);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the 2D mode
|
|
*/
|
|
vtkSetMacro(Use2DMode, int);
|
|
vtkGetMacro(Use2DMode, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the 2D mode the vertical offset for X title in 2D mode
|
|
*/
|
|
vtkSetMacro(VerticalOffsetXTitle2D, double);
|
|
vtkGetMacro(VerticalOffsetXTitle2D, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the 2D mode the horizontal offset for Y title in 2D mode
|
|
*/
|
|
vtkSetMacro(HorizontalOffsetYTitle2D, double);
|
|
vtkGetMacro(HorizontalOffsetYTitle2D, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get whether title position must be saved in 2D mode
|
|
*/
|
|
vtkSetMacro(SaveTitlePosition, int);
|
|
vtkGetMacro(SaveTitlePosition, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Provide real vector for non aligned axis
|
|
*/
|
|
vtkSetVector3Macro(AxisBaseForX, double);
|
|
vtkGetVector3Macro(AxisBaseForX, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Provide real vector for non aligned axis
|
|
*/
|
|
vtkSetVector3Macro(AxisBaseForY, double);
|
|
vtkGetVector3Macro(AxisBaseForY, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Provide real vector for non aligned axis
|
|
*/
|
|
vtkSetVector3Macro(AxisBaseForZ, double);
|
|
vtkGetVector3Macro(AxisBaseForZ, double);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Notify the axes that is not part of a cube anymore
|
|
*/
|
|
vtkSetMacro(AxisOnOrigin, int);
|
|
vtkGetMacro(AxisOnOrigin, int);
|
|
//@}
|
|
|
|
//@{
|
|
/**
|
|
* Set/Get the offsets used to position texts.
|
|
*/
|
|
vtkSetMacro(LabelOffset, double);
|
|
vtkGetMacro(LabelOffset, double);
|
|
vtkSetMacro(TitleOffset, double);
|
|
vtkGetMacro(TitleOffset, double);
|
|
vtkSetMacro(ExponentOffset, double);
|
|
vtkGetMacro(ExponentOffset, double);
|
|
vtkSetMacro(ScreenSize, double);
|
|
vtkGetMacro(ScreenSize, double);
|
|
//@}
|
|
|
|
protected:
|
|
vtkAxisActor();
|
|
~vtkAxisActor() override;
|
|
|
|
char* Title;
|
|
char* Exponent;
|
|
double Range[2];
|
|
double LastRange[2];
|
|
char* LabelFormat;
|
|
int UseTextActor3D;
|
|
int NumberOfLabelsBuilt;
|
|
vtkTypeBool MinorTicksVisible;
|
|
int LastMinorTicksVisible;
|
|
|
|
/**
|
|
* The location of the ticks.
|
|
* Inside: tick end toward positive direction of perpendicular axes.
|
|
* Outside: tick end toward negative direction of perpendicular axes.
|
|
*/
|
|
int TickLocation;
|
|
|
|
/**
|
|
* Hold the alignment property of the title related to the axis.
|
|
* Possible Alignment: VTK_ALIGN_BOTTOM, VTK_ALIGN_TOP, VTK_ALIGN_POINT1, VTK_ALIGN_POINT2.
|
|
*/
|
|
int TitleAlignLocation;
|
|
|
|
/**
|
|
* Hold the alignment property of the exponent coming from the label values.
|
|
* Possible Alignment: VTK_ALIGN_BOTTOM, VTK_ALIGN_TOP, VTK_ALIGN_POINT1, VTK_ALIGN_POINT2.
|
|
*/
|
|
int ExponentLocation;
|
|
|
|
vtkTypeBool DrawGridlines;
|
|
vtkTypeBool DrawGridlinesOnly;
|
|
int LastDrawGridlines;
|
|
int DrawGridlinesLocation; // 0: all | 1: closest | 2: farest
|
|
int LastDrawGridlinesLocation; // 0: all | 1: closest | 2: farest
|
|
double GridlineXLength;
|
|
double GridlineYLength;
|
|
double GridlineZLength;
|
|
|
|
vtkTypeBool DrawInnerGridlines;
|
|
int LastDrawInnerGridlines;
|
|
|
|
vtkTypeBool DrawGridpolys;
|
|
int LastDrawGridpolys;
|
|
|
|
vtkTypeBool AxisVisibility;
|
|
vtkTypeBool TickVisibility;
|
|
int LastTickVisibility;
|
|
vtkTypeBool LabelVisibility;
|
|
vtkTypeBool TitleVisibility;
|
|
bool ExponentVisibility;
|
|
bool LastMajorTickPointCorrection;
|
|
|
|
bool Log;
|
|
int AxisType;
|
|
int AxisPosition;
|
|
|
|
// coordinate system for axisAxtor, relative to world coordinates
|
|
double AxisBaseForX[3];
|
|
double AxisBaseForY[3];
|
|
double AxisBaseForZ[3];
|
|
|
|
private:
|
|
vtkAxisActor(const vtkAxisActor&) = delete;
|
|
void operator=(const vtkAxisActor&) = delete;
|
|
|
|
void TransformBounds(vtkViewport*, double bnds[6]);
|
|
|
|
void BuildLabels(vtkViewport*, bool);
|
|
void BuildLabels2D(vtkViewport*, bool);
|
|
void SetLabelPositions(vtkViewport*, bool);
|
|
void SetLabelPositions2D(vtkViewport*, bool);
|
|
|
|
/**
|
|
* Set orientation of the actor 2D (follower) to keep the axis orientation and stay on the right
|
|
* size
|
|
*/
|
|
void RotateActor2DFromAxisProjection(vtkTextActor* pActor2D);
|
|
|
|
/**
|
|
* Init the geometry of the title. (no positioning or orientation)
|
|
*/
|
|
void InitTitle();
|
|
|
|
/**
|
|
* Init the geometry of the common exponent of the labels values. (no positioning or orientation)
|
|
*/
|
|
void InitExponent();
|
|
|
|
/**
|
|
* This methdod set the text and set the base position of the follower from the axis
|
|
* The position will be modified in vtkAxisFollower::Render() sub-functions according to the
|
|
* camera position
|
|
* for convenience purpose.
|
|
*/
|
|
void BuildTitle(bool);
|
|
|
|
/**
|
|
* Build the actor to display the exponent in case it should appear next to the title or next to
|
|
* p2 coordinate.
|
|
*/
|
|
void BuildExponent(bool force);
|
|
|
|
void BuildExponent2D(vtkViewport* viewport, bool force);
|
|
|
|
void BuildTitle2D(vtkViewport* viewport, bool);
|
|
|
|
void SetAxisPointsAndLines(void);
|
|
|
|
bool BuildTickPoints(double p1[3], double p2[3], bool force);
|
|
|
|
// Build major ticks for linear scale.
|
|
void BuildMajorTicks(double p1[3], double p2[3], double localCoordSys[3][3]);
|
|
|
|
// Build major ticks for logarithmic scale.
|
|
void BuildMajorTicksLog(double p1[3], double p2[3], double localCoordSys[3][3]);
|
|
|
|
// Build minor ticks for linear scale.
|
|
void BuildMinorTicks(double p1[3], double p2[3], double localCoordSys[3][3]);
|
|
|
|
// Build minor ticks for logarithmic scale enabled
|
|
void BuildMinorTicksLog(double p1[3], double p2[3], double localCoordSys[3][3]);
|
|
|
|
void BuildAxisGridLines(double p1[3], double p2[3], double localCoordSys[3][3]);
|
|
|
|
bool TickVisibilityChanged(void);
|
|
vtkProperty* NewTitleProperty();
|
|
vtkProperty2D* NewTitleProperty2D();
|
|
vtkProperty* NewLabelProperty();
|
|
|
|
bool BoundsDisplayCoordinateChanged(vtkViewport* viewport);
|
|
|
|
vtkCoordinate* Point1Coordinate;
|
|
vtkCoordinate* Point2Coordinate;
|
|
|
|
double MajorTickSize;
|
|
double MinorTickSize;
|
|
|
|
// For each axis (for the inner gridline generation)
|
|
double MajorStart[3];
|
|
double DeltaMajor[3];
|
|
double MinorStart;
|
|
double DeltaMinor;
|
|
|
|
// For the ticks, w.r.t to the set range
|
|
double MajorRangeStart;
|
|
double MinorRangeStart;
|
|
|
|
/**
|
|
* step between 2 minor ticks, in range value (values displayed on the axis)
|
|
*/
|
|
double DeltaRangeMinor;
|
|
|
|
/**
|
|
* step between 2 major ticks, in range value (values displayed on the axis)
|
|
*/
|
|
double DeltaRangeMajor;
|
|
|
|
int LastAxisPosition;
|
|
int LastAxisType;
|
|
int LastTickLocation;
|
|
double LastLabelStart;
|
|
|
|
vtkPoints* MinorTickPts;
|
|
vtkPoints* MajorTickPts;
|
|
vtkPoints* GridlinePts;
|
|
vtkPoints* InnerGridlinePts;
|
|
vtkPoints* GridpolyPts;
|
|
|
|
vtkVectorText* TitleVector;
|
|
vtkPolyDataMapper* TitleMapper;
|
|
vtkAxisFollower* TitleActor;
|
|
vtkTextActor* TitleActor2D;
|
|
vtkProp3DAxisFollower* TitleProp3D;
|
|
vtkTextActor3D* TitleActor3D;
|
|
vtkTextProperty* TitleTextProperty;
|
|
|
|
//@{
|
|
/**
|
|
* Mapper/Actor used to display a common exponent of the label values
|
|
*/
|
|
vtkVectorText* ExponentVector;
|
|
vtkPolyDataMapper* ExponentMapper;
|
|
vtkAxisFollower* ExponentActor;
|
|
vtkTextActor* ExponentActor2D;
|
|
vtkProp3DAxisFollower* ExponentProp3D;
|
|
vtkTextActor3D* ExponentActor3D;
|
|
//@}
|
|
|
|
vtkVectorText** LabelVectors;
|
|
vtkPolyDataMapper** LabelMappers;
|
|
vtkAxisFollower** LabelActors;
|
|
vtkProp3DAxisFollower** LabelProps3D;
|
|
vtkTextActor** LabelActors2D;
|
|
vtkTextActor3D** LabelActors3D;
|
|
vtkTextProperty* LabelTextProperty;
|
|
|
|
// Main line axis
|
|
vtkPolyData* AxisLines;
|
|
vtkPolyDataMapper* AxisLinesMapper;
|
|
vtkActor* AxisLinesActor;
|
|
|
|
// Ticks of the axis
|
|
vtkPolyData *AxisMajorTicks, *AxisMinorTicks;
|
|
vtkPolyDataMapper *AxisMajorTicksMapper, *AxisMinorTicksMapper;
|
|
vtkActor *AxisMajorTicksActor, *AxisMinorTicksActor;
|
|
|
|
vtkPolyData* Gridlines;
|
|
vtkPolyDataMapper* GridlinesMapper;
|
|
vtkActor* GridlinesActor;
|
|
vtkPolyData* InnerGridlines;
|
|
vtkPolyDataMapper* InnerGridlinesMapper;
|
|
vtkActor* InnerGridlinesActor;
|
|
vtkPolyData* Gridpolys;
|
|
vtkPolyDataMapper* GridpolysMapper;
|
|
vtkActor* GridpolysActor;
|
|
|
|
vtkCamera* Camera;
|
|
vtkTimeStamp BuildTime;
|
|
vtkTimeStamp BuildTickPointsTime;
|
|
vtkTimeStamp BoundsTime;
|
|
vtkTimeStamp LabelBuildTime;
|
|
vtkTimeStamp TitleTextTime;
|
|
vtkTimeStamp ExponentTextTime;
|
|
|
|
int AxisOnOrigin;
|
|
|
|
int AxisHasZeroLength;
|
|
|
|
vtkTypeBool CalculateTitleOffset;
|
|
vtkTypeBool CalculateLabelOffset;
|
|
|
|
/**
|
|
* Use xy-axis only when Use2DMode=1:
|
|
*/
|
|
int Use2DMode;
|
|
|
|
/**
|
|
* Vertical offset in display coordinates for X axis title (used in 2D mode only)
|
|
* Default: -40
|
|
*/
|
|
double VerticalOffsetXTitle2D;
|
|
|
|
/**
|
|
* Vertical offset in display coordinates for X axis title (used in 2D mode only)
|
|
* Default: -50
|
|
*/
|
|
double HorizontalOffsetYTitle2D;
|
|
|
|
/**
|
|
* Save title position (used in 2D mode only):
|
|
* val = 0 : no need to save position (doesn't stick actors in a position)
|
|
* val = 1 : positions have to be saved during the next render pass
|
|
* val = 2 : positions are saved; use them
|
|
*/
|
|
int SaveTitlePosition;
|
|
|
|
/**
|
|
* Constant position for the title (used in 2D mode only)
|
|
*/
|
|
double TitleConstantPosition[2];
|
|
|
|
/**
|
|
* True if the 2D title has to be built, false otherwise
|
|
*/
|
|
bool NeedBuild2D;
|
|
|
|
double LastMinDisplayCoordinate[3];
|
|
double LastMaxDisplayCoordinate[3];
|
|
double TickVector[3];
|
|
|
|
//@{
|
|
/**
|
|
* Offsets used to position text.
|
|
*/
|
|
double ScreenSize;
|
|
double LabelOffset;
|
|
double TitleOffset;
|
|
double ExponentOffset;
|
|
};
|
|
//@}
|
|
|
|
#endif
|