Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
branch: master
Fetching contributors…

Cannot retrieve contributors at this time

300 lines (246 sloc) 10.045 kb
/*=========================================================================
Program: Visualization Toolkit
Module: vtkAxesActor.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.
=========================================================================*/
// .NAME vtkAxesActor - a 3D axes representation
// .SECTION Description
// vtkAxesActor is a hybrid 2D/3D actor used to represent 3D axes in a scene.
// The user can define the geometry to use for the shaft or the tip, and the
// user can set the text for the three axes. The text will appear to follow the
// camera since it is implemented by means of vtkCaptionActor2D. All of the
// functionality of the underlying vtkCaptionActor2D objects are accessable so
// that, for instance, the font attributes of the axes text can be manipulated
// through vtkTextProperty. Since this class inherits from vtkProp3D, one can
// apply a user transform to the underlying geometry and the positioning of the
// labels. For example, a rotation transform could be used to generate a
// left-handed axes representation.
// .SECTION Thanks
// Thanks to Goodwin Lawlor for posting a tcl script which featured the
// use of vtkCaptionActor2D to implement the text labels. This class is
// based on Paraview's vtkPVAxesActor.
// .SECTION Caveats
// vtkAxesActor is primarily intended for use with vtkOrientationMarkerWidget.
// The bounds of this actor are calculated as though the geometry of the axes
// were symmetric: that is, although only positive axes are visible, bounds
// are calculated as though negative axes are present too. This is done
// intentionally to implement functionality of the camera update mechanism
// in vtkOrientationMarkerWidget.
// .SECTION See Also
// vtkAnnotatedCubeActor vtkOrientationMarkerWidget vtkCaptionActor2D
// vtkTextProperty
#ifndef __vtkAxesActor_h
#define __vtkAxesActor_h
#include "vtkProp3D.h"
class vtkActor;
class vtkCaptionActor2D;
class vtkConeSource;
class vtkCylinderSource;
class vtkLineSource;
class vtkPolyData;
class vtkPropCollection;
class vtkProperty;
class vtkRenderer;
class vtkSphereSource;
class VTK_HYBRID_EXPORT vtkAxesActor : public vtkProp3D
{
public:
static vtkAxesActor *New();
vtkTypeMacro(vtkAxesActor,vtkProp3D);
void PrintSelf(ostream& os, vtkIndent indent);
// Description:
// For some exporters and other other operations we must be
// able to collect all the actors or volumes. These methods
// are used in that process.
virtual void GetActors(vtkPropCollection *);
// Description:
// Support the standard render methods.
virtual int RenderOpaqueGeometry(vtkViewport *viewport);
virtual int RenderTranslucentPolygonalGeometry(vtkViewport *viewport);
virtual int RenderOverlay(vtkViewport *viewport);
// Description:
// Does this prop have some translucent polygonal geometry?
virtual int HasTranslucentPolygonalGeometry();
// Description:
// Shallow copy of an axes actor. Overloads the virtual vtkProp method.
void ShallowCopy(vtkProp *prop);
// 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:
// Get the bounds for this Actor as (Xmin,Xmax,Ymin,Ymax,Zmin,Zmax). (The
// method GetBounds(double bounds[6]) is available from the superclass.)
void GetBounds(double bounds[6]);
double *GetBounds();
// Description:
// Get the actors mtime plus consider its properties and texture if set.
unsigned long int GetMTime();
// Description:
// Return the mtime of anything that would cause the rendered image to
// appear differently. Usually this involves checking the mtime of the
// prop plus anything else it depends on such as properties, textures
// etc.
virtual unsigned long GetRedrawMTime();
// Description:
// Set the total length of the axes in 3 dimensions.
void SetTotalLength( double v[3] )
{ this->SetTotalLength( v[0], v[1], v[2] ); }
void SetTotalLength( double x, double y, double z );
vtkGetVectorMacro( TotalLength, double, 3 );
// Description:
// Set the normalized (0-1) length of the shaft.
void SetNormalizedShaftLength( double v[3] )
{ this->SetNormalizedShaftLength( v[0], v[1], v[2] ); }
void SetNormalizedShaftLength( double x, double y, double z );
vtkGetVectorMacro( NormalizedShaftLength, double, 3 );
// Description:
// Set the normalized (0-1) length of the tip. Normally, this would be
// 1 - the normalized length of the shaft.
void SetNormalizedTipLength( double v[3] )
{ this->SetNormalizedTipLength( v[0], v[1], v[2] ); }
void SetNormalizedTipLength( double x, double y, double z );
vtkGetVectorMacro( NormalizedTipLength, double, 3 );
// Description:
// Set the normalized (0-1) position of the label along the length of
// the shaft. A value > 1 is permissible.
void SetNormalizedLabelPosition( double v[3] )
{ this->SetNormalizedLabelPosition( v[0], v[1], v[2] ); }
void SetNormalizedLabelPosition( double x, double y, double z );
vtkGetVectorMacro( NormalizedLabelPosition, double, 3 );
// Description:
// Set/get the resolution of the pieces of the axes actor.
vtkSetClampMacro(ConeResolution, int, 3, 128);
vtkGetMacro(ConeResolution, int);
vtkSetClampMacro(SphereResolution, int, 3, 128);
vtkGetMacro(SphereResolution, int);
vtkSetClampMacro(CylinderResolution, int, 3, 128);
vtkGetMacro(CylinderResolution, int);
// Description:
// Set/get the radius of the pieces of the axes actor.
vtkSetClampMacro(ConeRadius, double, 0, VTK_LARGE_FLOAT);
vtkGetMacro(ConeRadius, double);
vtkSetClampMacro(SphereRadius, double, 0, VTK_LARGE_FLOAT);
vtkGetMacro(SphereRadius, double);
vtkSetClampMacro(CylinderRadius, double, 0, VTK_LARGE_FLOAT);
vtkGetMacro(CylinderRadius, double);
// Description:
// Set the type of the shaft to a cylinder, line, or user defined geometry.
void SetShaftType( int type );
void SetShaftTypeToCylinder()
{ this->SetShaftType( vtkAxesActor::CYLINDER_SHAFT ); }
void SetShaftTypeToLine()
{ this->SetShaftType( vtkAxesActor::LINE_SHAFT ); }
void SetShaftTypeToUserDefined()
{ this->SetShaftType( vtkAxesActor::USER_DEFINED_SHAFT ); }
vtkGetMacro(ShaftType, int);
// Description:
// Set the type of the tip to a cone, sphere, or user defined geometry.
void SetTipType( int type );
void SetTipTypeToCone()
{ this->SetTipType( vtkAxesActor::CONE_TIP ); }
void SetTipTypeToSphere()
{ this->SetTipType( vtkAxesActor::SPHERE_TIP ); }
void SetTipTypeToUserDefined()
{ this->SetTipType( vtkAxesActor::USER_DEFINED_TIP ); }
vtkGetMacro(TipType, int);
// Description:
// Set the user defined tip polydata.
void SetUserDefinedTip( vtkPolyData * );
vtkGetObjectMacro( UserDefinedTip, vtkPolyData );
// Description:
// Set the user defined shaft polydata.
void SetUserDefinedShaft( vtkPolyData * );
vtkGetObjectMacro( UserDefinedShaft, vtkPolyData );
// Description:
// Get the tip properties.
vtkProperty *GetXAxisTipProperty();
vtkProperty *GetYAxisTipProperty();
vtkProperty *GetZAxisTipProperty();
// Description:
// Get the shaft properties.
vtkProperty *GetXAxisShaftProperty();
vtkProperty *GetYAxisShaftProperty();
vtkProperty *GetZAxisShaftProperty();
// Description:
// Retrieve handles to the X, Y and Z axis (so that you can set their text
// properties for example)
vtkCaptionActor2D *GetXAxisCaptionActor2D()
{return this->XAxisLabel;}
vtkCaptionActor2D *GetYAxisCaptionActor2D()
{return this->YAxisLabel;}
vtkCaptionActor2D *GetZAxisCaptionActor2D()
{return this->ZAxisLabel;}
// Description:
// Set/get the label text.
vtkSetStringMacro( XAxisLabelText );
vtkGetStringMacro( XAxisLabelText );
vtkSetStringMacro( YAxisLabelText );
vtkGetStringMacro( YAxisLabelText );
vtkSetStringMacro( ZAxisLabelText );
vtkGetStringMacro( ZAxisLabelText );
// Description:
// Enable/disable drawing the axis labels.
vtkSetMacro(AxisLabels, int);
vtkGetMacro(AxisLabels, int);
vtkBooleanMacro(AxisLabels, int);
//BTX
enum
{
CYLINDER_SHAFT,
LINE_SHAFT,
USER_DEFINED_SHAFT
};
enum
{
CONE_TIP,
SPHERE_TIP,
USER_DEFINED_TIP
};
//ETX
protected:
vtkAxesActor();
~vtkAxesActor();
vtkCylinderSource *CylinderSource;
vtkLineSource *LineSource;
vtkConeSource *ConeSource;
vtkSphereSource *SphereSource;
vtkActor *XAxisShaft;
vtkActor *YAxisShaft;
vtkActor *ZAxisShaft;
vtkActor *XAxisTip;
vtkActor *YAxisTip;
vtkActor *ZAxisTip;
void UpdateProps();
double TotalLength[3];
double NormalizedShaftLength[3];
double NormalizedTipLength[3];
double NormalizedLabelPosition[3];
int ShaftType;
int TipType;
vtkPolyData *UserDefinedTip;
vtkPolyData *UserDefinedShaft;
char *XAxisLabelText;
char *YAxisLabelText;
char *ZAxisLabelText;
vtkCaptionActor2D *XAxisLabel;
vtkCaptionActor2D *YAxisLabel;
vtkCaptionActor2D *ZAxisLabel;
int AxisLabels;
int ConeResolution;
int SphereResolution;
int CylinderResolution;
double ConeRadius;
double SphereRadius;
double CylinderRadius;
private:
vtkAxesActor(const vtkAxesActor&); // Not implemented.
void operator=(const vtkAxesActor&); // Not implemented.
};
#endif
Jump to Line
Something went wrong with that request. Please try again.