Cloned library of VTK-5.0.0 with extra build files for internal package management.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

316 lines
11 KiB

/*=========================================================================
Program: Visualization Toolkit
Module: $RCSfile: vtkAxisActor2D.h,v $
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
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.
=========================================================================*/
// .NAME vtkAxisActor2D - Create an axis with tick marks and labels
// .SECTION Description
// vtkAxisActor2D creates an axis with tick marks, labels, and/or a title,
// depending on the particular instance variable settings. vtkAxisActor2D is
// a 2D actor; that is, it is drawn on the overlay plane and is not
// occluded by 3D geometry. To use this class, you typically specify two
// points defining the start and end points of the line (x-y definition using
// vtkCoordinate class), 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. You can
// also specify the label format (a printf style format).
//
// This class decides what font size to use and how to locate the labels. It
// also decides how to create reasonable tick marks and labels. The number
// of labels and the range of values may not match the number specified, but
// should be close.
//
// Labels are drawn on the "right" side of the axis. The "right" side is
// the side of the axis on the right as you move from Position to Position2.
// The way the labels and title line up with the axis and tick marks depends on
// whether the line is considered horizontal or vertical.
//
// The vtkActor2D instance variables Position and Position2 are instances of
// vtkCoordinate. Note that the Position2 is an absolute position in that
// class (it was by default relative to Position in vtkActor2D).
//
// What this means is that you can specify the axis in a variety of coordinate
// systems. Also, the axis does not have to be either horizontal or vertical.
// The tick marks are created so that they are perpendicular to the axis.
//
// Set the text property/attributes of the title and the labels through the
// vtkTextProperty objects associated to this actor.
//
// .SECTION See Also
// vtkCubeAxesActor2D can be used to create axes in world coordinate space.
//
// vtkActor2D vtkTextMapper vtkPolyDataMapper2D vtkScalarBarActor
// vtkCoordinate vtkTextProperty
#ifndef __vtkAxisActor2D_h
#define __vtkAxisActor2D_h
#include "vtkActor2D.h"
class vtkPolyDataMapper2D;
class vtkPolyData;
class vtkTextMapper;
class vtkTextProperty;
#define VTK_MAX_LABELS 25
class VTK_RENDERING_EXPORT vtkAxisActor2D : public vtkActor2D
{
public:
vtkTypeRevisionMacro(vtkAxisActor2D,vtkActor2D);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// Instantiate object.
static vtkAxisActor2D *New();
// Description:
// Specify the position of the first point defining the axis.
// Note: backward compatibility only, use vtkActor2D's Position instead.
virtual vtkCoordinate *GetPoint1Coordinate()
{ return this->GetPositionCoordinate(); };
virtual void SetPoint1(double x[2]) { this->SetPosition(x); };
virtual void SetPoint1(double x, double y) { this->SetPosition(x,y); };
virtual double *GetPoint1() { return this->GetPosition(); };
// Description:
// Specify the position of the second point defining the axis. Note that
// the order from Point1 to Point2 controls which side the tick marks
// are drawn on (ticks are drawn on the right, if visible).
// Note: backward compatibility only, use vtkActor2D's Position2 instead.
virtual vtkCoordinate *GetPoint2Coordinate()
{ return this->GetPosition2Coordinate(); };
virtual void SetPoint2(double x[2]) { this->SetPosition2(x); };
virtual void SetPoint2(double x, double y) { this->SetPosition2(x,y); };
virtual double *GetPoint2() { return this->GetPosition2(); };
// Description:
// 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);
// Description:
// Set/Get the number of annotation labels to show.
vtkSetClampMacro(NumberOfLabels, int, 2, VTK_MAX_LABELS);
vtkGetMacro(NumberOfLabels, int);
// Description:
// Set/Get the format with which to print the labels on the scalar
// bar.
vtkSetStringMacro(LabelFormat);
vtkGetStringMacro(LabelFormat);
// Description:
// Set/Get the flag that controls whether the labels and ticks are
// adjusted for "nice" numerical values to make it easier to read
// the labels. The adjustment is based in the Range instance variable.
// Call GetAdjustedRange and GetAdjustedNumberOfLabels to get the adjusted
// range and number of labels.
vtkSetMacro(AdjustLabels, int);
vtkGetMacro(AdjustLabels, int);
vtkBooleanMacro(AdjustLabels, int);
virtual double *GetAdjustedRange()
{
this->UpdateAdjustedRange();
return this->AdjustedRange;
}
virtual void GetAdjustedRange(double &_arg1, double &_arg2)
{
this->UpdateAdjustedRange();
_arg1 = this->AdjustedRange[0];
_arg2 = this->AdjustedRange[1];
};
virtual void GetAdjustedRange(double _arg[2])
{
this->GetAdjustedRange(_arg[0], _arg[1]);
}
virtual int GetAdjustedNumberOfLabels()
{
this->UpdateAdjustedRange();
return this->AdjustedNumberOfLabels;
}
// Description:
// Set/Get the title of the scalar bar actor,
vtkSetStringMacro(Title);
vtkGetStringMacro(Title);
// Description:
// Set/Get the title text property.
virtual void SetTitleTextProperty(vtkTextProperty *p);
vtkGetObjectMacro(TitleTextProperty,vtkTextProperty);
// Description:
// Set/Get the labels text property.
virtual void SetLabelTextProperty(vtkTextProperty *p);
vtkGetObjectMacro(LabelTextProperty,vtkTextProperty);
// Description:
// Set/Get the length of the tick marks (expressed in pixels or display
// coordinates).
vtkSetClampMacro(TickLength, int, 0, 100);
vtkGetMacro(TickLength, int);
// Description:
// Set/Get the offset of the labels (expressed in pixels or display
// coordinates). The offset is the distance of labels from tick marks
// or other objects.
vtkSetClampMacro(TickOffset, int, 0, 100);
vtkGetMacro(TickOffset, int);
// Description:
// Set/Get visibility of the axis line.
vtkSetMacro(AxisVisibility, int);
vtkGetMacro(AxisVisibility, int);
vtkBooleanMacro(AxisVisibility, int);
// Description:
// Set/Get visibility of the axis tick marks.
vtkSetMacro(TickVisibility, int);
vtkGetMacro(TickVisibility, int);
vtkBooleanMacro(TickVisibility, int);
// Description:
// Set/Get visibility of the axis labels.
vtkSetMacro(LabelVisibility, int);
vtkGetMacro(LabelVisibility, int);
vtkBooleanMacro(LabelVisibility, int);
// Description:
// Set/Get visibility of the axis title.
vtkSetMacro(TitleVisibility, int);
vtkGetMacro(TitleVisibility, int);
vtkBooleanMacro(TitleVisibility, int);
// Description:
// Set/Get the factor that controls the overall size of the fonts used
// to label and title the axes. This ivar used in conjunction with
// the LabelFactor can be used to control font sizes.
vtkSetClampMacro(FontFactor, double, 0.1, 2.0);
vtkGetMacro(FontFactor, double);
// Description:
// Set/Get the factor that controls the relative size of the axis labels
// to the axis title.
vtkSetClampMacro(LabelFactor, double, 0.1, 2.0);
vtkGetMacro(LabelFactor, double);
// Description:
// Draw the axis.
int RenderOverlay(vtkViewport* viewport);
int RenderOpaqueGeometry(vtkViewport* viewport);
int RenderTranslucentGeometry(vtkViewport *) {return 0;}
// Description:
// 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 *);
// Description:
// This method computes the range of the axis given an input range.
// It also computes the number of tick marks given a suggested number.
// (The number of tick marks includes end ticks as well.)
// The number of tick marks computed (in conjunction with the output
// range) will yield "nice" tick values. For example, if the input range
// is (0.25,96.7) and the number of ticks requested is 10, the output range
// will be (0,100) with the number of computed ticks to 11 to yield tick
// values of (0,10,20,...,100).
static void ComputeRange(double inRange[2],
double outRange[2],
int inNumTicks,
int &outNumTicks,
double &interval);
// Description:
// General method to computes font size from a representative size on the
// viewport (given by size[2]). The method returns the font size (in points)
// and the string height/width (in pixels). It also sets the font size of the
// instance of vtkTextMapper provided. The factor is used when you're trying
// to create text of different size-factor (it is usually = 1 but you can
// adjust the font size by making factor larger or smaller).
static int SetFontSize(vtkViewport *viewport,
vtkTextMapper *textMapper,
int *targetSize,
double factor,
int *stringSize);
static int SetMultipleFontSize(vtkViewport *viewport,
vtkTextMapper **textMappers,
int nbOfMappers,
int *targetSize,
double factor,
int *stringSize);
// Description:
// Shallow copy of an axis actor. Overloads the virtual vtkProp method.
void ShallowCopy(vtkProp *prop);
protected:
vtkAxisActor2D();
~vtkAxisActor2D();
vtkTextProperty *TitleTextProperty;
vtkTextProperty *LabelTextProperty;
char *Title;
double Range[2];
int NumberOfLabels;
char *LabelFormat;
int AdjustLabels;
double FontFactor;
double LabelFactor;
int TickLength;
int TickOffset;
double AdjustedRange[2];
int AdjustedNumberOfLabels;
int NumberOfLabelsBuilt;
int AxisVisibility;
int TickVisibility;
int LabelVisibility;
int TitleVisibility;
int LastPosition[2];
int LastPosition2[2];
int LastSize[2];
int LastMaxLabelSize[2];
virtual void BuildAxis(vtkViewport *viewport);
static double ComputeStringOffset(double width, double height, double theta);
static void SetOffsetPosition(double xTick[3], double theta,
int stringHeight, int stringWidth,
int offset, vtkActor2D *actor);
virtual void UpdateAdjustedRange();
vtkTextMapper *TitleMapper;
vtkActor2D *TitleActor;
vtkTextMapper **LabelMappers;
vtkActor2D **LabelActors;
vtkPolyData *Axis;
vtkPolyDataMapper2D *AxisMapper;
vtkActor2D *AxisActor;
vtkTimeStamp AdjustedRangeBuildTime;
vtkTimeStamp BuildTime;
private:
vtkAxisActor2D(const vtkAxisActor2D&); // Not implemented.
void operator=(const vtkAxisActor2D&); // Not implemented.
};
#endif