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.
256 lines
7.6 KiB
C
256 lines
7.6 KiB
C
|
3 weeks ago
|
/*=========================================================================
|
||
|
|
|
||
|
|
Program: Visualization Toolkit
|
||
|
|
Module: vtkLegendScaleActor.h
|
||
|
|
|
||
|
|
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.
|
||
|
|
|
||
|
|
=========================================================================*/
|
||
|
|
/**
|
||
|
|
* @class vtkLegendScaleActor
|
||
|
|
* @brief annotate the render window with scale and distance information
|
||
|
|
*
|
||
|
|
* This class is used to annotate the render window. Its basic goal is to
|
||
|
|
* provide an indication of the scale of the scene. Four axes surrounding the
|
||
|
|
* render window indicate (in a variety of ways) the scale of what the camera
|
||
|
|
* is viewing. An option also exists for displaying a scale legend.
|
||
|
|
*
|
||
|
|
* The axes can be programmed either to display distance scales or x-y
|
||
|
|
* coordinate values. By default, the scales display a distance. However,
|
||
|
|
* if you know that the view is down the z-axis, the scales can be programmed
|
||
|
|
* to display x-y coordinate values.
|
||
|
|
*
|
||
|
|
* @warning
|
||
|
|
* Please be aware that the axes and scale values are subject to perspective
|
||
|
|
* effects. The distances are computed in the focal plane of the camera.
|
||
|
|
* When there are large view angles (i.e., perspective projection), the
|
||
|
|
* computed distances may provide users the wrong sense of scale. These
|
||
|
|
* effects are not present when parallel projection is enabled.
|
||
|
|
*/
|
||
|
|
|
||
|
|
#ifndef vtkLegendScaleActor_h
|
||
|
|
#define vtkLegendScaleActor_h
|
||
|
|
|
||
|
|
#include "vtkRenderingAnnotationModule.h" // For export macro
|
||
|
|
#include "vtkProp.h"
|
||
|
|
#include "vtkCoordinate.h" // For vtkViewportCoordinateMacro
|
||
|
|
|
||
|
|
class vtkAxisActor2D;
|
||
|
|
class vtkTextProperty;
|
||
|
|
class vtkPolyData;
|
||
|
|
class vtkPolyDataMapper2D;
|
||
|
|
class vtkActor2D;
|
||
|
|
class vtkTextMapper;
|
||
|
|
class vtkPoints;
|
||
|
|
class vtkCoordinate;
|
||
|
|
|
||
|
|
class VTKRENDERINGANNOTATION_EXPORT vtkLegendScaleActor : public vtkProp
|
||
|
|
{
|
||
|
|
public:
|
||
|
|
/**
|
||
|
|
* Instantiate the class.
|
||
|
|
*/
|
||
|
|
static vtkLegendScaleActor *New();
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Standard methods for the class.
|
||
|
|
*/
|
||
|
|
vtkTypeMacro(vtkLegendScaleActor,vtkProp);
|
||
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
enum AttributeLocation
|
||
|
|
{
|
||
|
|
DISTANCE=0,
|
||
|
|
XY_COORDINATES=1
|
||
|
|
};
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Specify the mode for labeling the scale axes. By default, the axes are
|
||
|
|
* labeled with the distance between points (centered at a distance of
|
||
|
|
* 0.0). Alternatively if you know that the view is down the z-axis; the
|
||
|
|
* axes can be labeled with x-y coordinate values.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(LabelMode,int,DISTANCE,XY_COORDINATES);
|
||
|
|
vtkGetMacro(LabelMode,int);
|
||
|
|
void SetLabelModeToDistance() {this->SetLabelMode(DISTANCE);}
|
||
|
|
void SetLabelModeToXYCoordinates() {this->SetLabelMode(XY_COORDINATES);}
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the flags that control which of the four axes to display (top,
|
||
|
|
* bottom, left and right). By default, all the axes are displayed.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(RightAxisVisibility,int);
|
||
|
|
vtkGetMacro(RightAxisVisibility,int);
|
||
|
|
vtkBooleanMacro(RightAxisVisibility,int);
|
||
|
|
vtkSetMacro(TopAxisVisibility,int);
|
||
|
|
vtkGetMacro(TopAxisVisibility,int);
|
||
|
|
vtkBooleanMacro(TopAxisVisibility,int);
|
||
|
|
vtkSetMacro(LeftAxisVisibility,int);
|
||
|
|
vtkGetMacro(LeftAxisVisibility,int);
|
||
|
|
vtkBooleanMacro(LeftAxisVisibility,int);
|
||
|
|
vtkSetMacro(BottomAxisVisibility,int);
|
||
|
|
vtkGetMacro(BottomAxisVisibility,int);
|
||
|
|
vtkBooleanMacro(BottomAxisVisibility,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Indicate whether the legend scale should be displayed or not.
|
||
|
|
* The default is On.
|
||
|
|
*/
|
||
|
|
vtkSetMacro(LegendVisibility,int);
|
||
|
|
vtkGetMacro(LegendVisibility,int);
|
||
|
|
vtkBooleanMacro(LegendVisibility,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Convenience method that turns all the axes either on or off.
|
||
|
|
*/
|
||
|
|
void AllAxesOn();
|
||
|
|
void AllAxesOff();
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Convenience method that turns all the axes and the legend scale.
|
||
|
|
*/
|
||
|
|
void AllAnnotationsOn();
|
||
|
|
void AllAnnotationsOff();
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the offset of the right axis from the border. This number is expressed in
|
||
|
|
* pixels, and represents the approximate distance of the axes from the sides
|
||
|
|
* of the renderer. The default is 50.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(RightBorderOffset,int,5,VTK_INT_MAX);
|
||
|
|
vtkGetMacro(RightBorderOffset,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the offset of the top axis from the border. This number is expressed in
|
||
|
|
* pixels, and represents the approximate distance of the axes from the sides
|
||
|
|
* of the renderer. The default is 30.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(TopBorderOffset,int,5,VTK_INT_MAX);
|
||
|
|
vtkGetMacro(TopBorderOffset,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the offset of the left axis from the border. This number is expressed in
|
||
|
|
* pixels, and represents the approximate distance of the axes from the sides
|
||
|
|
* of the renderer. The default is 50.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(LeftBorderOffset,int,5,VTK_INT_MAX);
|
||
|
|
vtkGetMacro(LeftBorderOffset,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the offset of the bottom axis from the border. This number is expressed in
|
||
|
|
* pixels, and represents the approximate distance of the axes from the sides
|
||
|
|
* of the renderer. The default is 30.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(BottomBorderOffset,int,5,VTK_INT_MAX);
|
||
|
|
vtkGetMacro(BottomBorderOffset,int);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Get/Set the corner offset. This is the offset factor used to offset the
|
||
|
|
* axes at the corners. Default value is 2.0.
|
||
|
|
*/
|
||
|
|
vtkSetClampMacro(CornerOffsetFactor, double, 1.0, 10.0);
|
||
|
|
vtkGetMacro(CornerOffsetFactor, double);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Set/Get the labels text properties for the legend title and labels.
|
||
|
|
*/
|
||
|
|
vtkGetObjectMacro(LegendTitleProperty,vtkTextProperty);
|
||
|
|
vtkGetObjectMacro(LegendLabelProperty,vtkTextProperty);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* These are methods to retrieve the vtkAxisActors used to represent
|
||
|
|
* the four axes that form this representation. Users may retrieve and
|
||
|
|
* then modify these axes to control their appearance.
|
||
|
|
*/
|
||
|
|
vtkGetObjectMacro(RightAxis,vtkAxisActor2D);
|
||
|
|
vtkGetObjectMacro(TopAxis,vtkAxisActor2D);
|
||
|
|
vtkGetObjectMacro(LeftAxis,vtkAxisActor2D);
|
||
|
|
vtkGetObjectMacro(BottomAxis,vtkAxisActor2D);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
//@{
|
||
|
|
/**
|
||
|
|
* Standard methods supporting the rendering process.
|
||
|
|
*/
|
||
|
|
virtual void BuildRepresentation(vtkViewport *viewport);
|
||
|
|
virtual void GetActors2D(vtkPropCollection*);
|
||
|
|
virtual void ReleaseGraphicsResources(vtkWindow*);
|
||
|
|
virtual int RenderOverlay(vtkViewport*);
|
||
|
|
virtual int RenderOpaqueGeometry(vtkViewport*);
|
||
|
|
//@}
|
||
|
|
|
||
|
|
protected:
|
||
|
|
vtkLegendScaleActor();
|
||
|
|
~vtkLegendScaleActor();
|
||
|
|
|
||
|
|
int LabelMode;
|
||
|
|
int RightBorderOffset;
|
||
|
|
int TopBorderOffset;
|
||
|
|
int LeftBorderOffset;
|
||
|
|
int BottomBorderOffset;
|
||
|
|
double CornerOffsetFactor;
|
||
|
|
|
||
|
|
// The four axes around the borders of the renderer
|
||
|
|
vtkAxisActor2D *RightAxis;
|
||
|
|
vtkAxisActor2D *TopAxis;
|
||
|
|
vtkAxisActor2D *LeftAxis;
|
||
|
|
vtkAxisActor2D *BottomAxis;
|
||
|
|
|
||
|
|
// Control the display of the axes
|
||
|
|
int RightAxisVisibility;
|
||
|
|
int TopAxisVisibility;
|
||
|
|
int LeftAxisVisibility;
|
||
|
|
int BottomAxisVisibility;
|
||
|
|
|
||
|
|
// Support for the legend.
|
||
|
|
int LegendVisibility;
|
||
|
|
vtkPolyData *Legend;
|
||
|
|
vtkPoints *LegendPoints;
|
||
|
|
vtkPolyDataMapper2D *LegendMapper;
|
||
|
|
vtkActor2D *LegendActor;
|
||
|
|
vtkTextMapper *LabelMappers[6];
|
||
|
|
vtkActor2D *LabelActors[6];
|
||
|
|
vtkTextProperty *LegendTitleProperty;
|
||
|
|
vtkTextProperty *LegendLabelProperty;
|
||
|
|
vtkCoordinate *Coordinate;
|
||
|
|
|
||
|
|
vtkTimeStamp BuildTime;
|
||
|
|
|
||
|
|
private:
|
||
|
|
vtkLegendScaleActor(const vtkLegendScaleActor&) VTK_DELETE_FUNCTION;
|
||
|
|
void operator=(const vtkLegendScaleActor&) VTK_DELETE_FUNCTION;
|
||
|
|
};
|
||
|
|
|
||
|
|
#endif
|