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.
160 lines
6.1 KiB
160 lines
6.1 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkCoordinate.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 vtkCoordinate - perform coordinate transformation, and represent position, in a variety of vtk coordinate systems
|
|
// .SECTION Description
|
|
// vtkCoordinate represents position in a variety of coordinate systems, and
|
|
// converts position to other coordinate systems. It also supports relative
|
|
// positioning, so you can create a cascade of vtkCoordinate objects (no loops
|
|
// please!) that refer to each other. The typical usage of this object is
|
|
// to set the coordinate system in which to represent a position (e.g.,
|
|
// SetCoordinateSystemToNormalizedDisplay()), set the value of the coordinate
|
|
// (e.g., SetValue()), and then invoke the appropriate method to convert to
|
|
// another coordinate system (e.g., GetComputedWorldValue()).
|
|
//
|
|
// The coordinate systems in vtk are as follows:
|
|
//<PRE>
|
|
// DISPLAY - x-y pixel values in window
|
|
// NORMALIZED DISPLAY - x-y (0,1) normalized values
|
|
// VIEWPORT - x-y pixel values in viewport
|
|
// NORMALIZED VIEWPORT - x-y (0,1) normalized value in viewport
|
|
// VIEW - x-y-z (-1,1) values in camera coordinates. (z is depth)
|
|
// WORLD - x-y-z global coordinate values
|
|
// USERDEFINED - x-y-z in User defined space
|
|
//</PRE>
|
|
//
|
|
// If you cascade vtkCoordinate objects, you refer to another vtkCoordinate
|
|
// object which in turn can refer to others, and so on. This allows you to
|
|
// create composite groups of things like vtkActor2D that are positioned
|
|
// relative to one another. Note that in cascaded sequences, each
|
|
// vtkCoordinate object may be specified in different coordinate systems!
|
|
|
|
// .SECTION See Also
|
|
// vtkActor2D vtkScalarBarActor
|
|
|
|
#ifndef __vtkCoordinate_h
|
|
#define __vtkCoordinate_h
|
|
|
|
#include "vtkObject.h"
|
|
class vtkViewport;
|
|
|
|
#define VTK_DISPLAY 0
|
|
#define VTK_NORMALIZED_DISPLAY 1
|
|
#define VTK_VIEWPORT 2
|
|
#define VTK_NORMALIZED_VIEWPORT 3
|
|
#define VTK_VIEW 4
|
|
#define VTK_WORLD 5
|
|
#define VTK_USERDEFINED 6
|
|
|
|
class VTK_FILTERING_EXPORT vtkCoordinate : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkCoordinate,vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Creates an instance of this class with the following defaults:
|
|
// value of (0,0,0) in world coordinates.
|
|
static vtkCoordinate* New();
|
|
|
|
// Description:
|
|
// Set/get the coordinate system which this coordinate
|
|
// is defined in. The options are Display, Normalized Display,
|
|
// Viewport, Normalized Viewport, View, and World.
|
|
vtkSetMacro(CoordinateSystem, int);
|
|
vtkGetMacro(CoordinateSystem, int);
|
|
void SetCoordinateSystemToDisplay() {this->SetCoordinateSystem(VTK_DISPLAY);}
|
|
void SetCoordinateSystemToNormalizedDisplay()
|
|
{this->SetCoordinateSystem(VTK_NORMALIZED_DISPLAY);}
|
|
void SetCoordinateSystemToViewport()
|
|
{this->SetCoordinateSystem(VTK_VIEWPORT);}
|
|
void SetCoordinateSystemToNormalizedViewport()
|
|
{this->SetCoordinateSystem(VTK_NORMALIZED_VIEWPORT);}
|
|
void SetCoordinateSystemToView() {this->SetCoordinateSystem(VTK_VIEW);}
|
|
void SetCoordinateSystemToWorld() {this->SetCoordinateSystem(VTK_WORLD);}
|
|
|
|
const char *GetCoordinateSystemAsString ();
|
|
|
|
// Description:
|
|
// Set/get the value of this coordinate. This can be thought of as
|
|
// the position of this coordinate in its coordinate system.
|
|
vtkSetVector3Macro(Value,double);
|
|
vtkGetVector3Macro(Value,double);
|
|
void SetValue(double a, double b) { this->SetValue(a,b,0.0);}
|
|
|
|
// Description:
|
|
// If this coordinate is relative to another coordinate,
|
|
// then specify that coordinate as the ReferenceCoordinate.
|
|
// If this is NULL the coordinate is assumed to be absolute.
|
|
virtual void SetReferenceCoordinate(vtkCoordinate*);
|
|
vtkGetObjectMacro(ReferenceCoordinate,vtkCoordinate);
|
|
|
|
// Description:
|
|
// If you want this coordinate to be relative to a specific
|
|
// vtkViewport (vtkRenderer) then you can specify
|
|
// that here.
|
|
void SetViewport(vtkViewport *viewport);
|
|
vtkGetObjectMacro(Viewport,vtkViewport);
|
|
|
|
// Description:
|
|
// Return the computed value in a specified coordinate system.
|
|
double *GetComputedWorldValue(vtkViewport *);
|
|
int *GetComputedViewportValue(vtkViewport *);
|
|
int *GetComputedDisplayValue(vtkViewport *);
|
|
int *GetComputedLocalDisplayValue(vtkViewport *);
|
|
|
|
double *GetComputedDoubleViewportValue(vtkViewport *);
|
|
double *GetComputedDoubleDisplayValue(vtkViewport *);
|
|
|
|
// Description:
|
|
// GetComputedValue() will return either World, Viewport or
|
|
// Display based on what has been set as the coordinate system.
|
|
// This is good for objects like vtkLineSource, where the
|
|
// user might want to use them as World or Viewport coordinates
|
|
double *GetComputedValue(vtkViewport *);
|
|
|
|
// Description:
|
|
// GetComputedUserDefinedValue() is to be used only when
|
|
// the coordinate system is VTK_USERDEFINED. The user
|
|
// must subclass vtkCoordinate and override this function,
|
|
// when set as the TransformCoordinate in 2D-Mappers, the user
|
|
// can customize display of 2D polygons
|
|
virtual double *GetComputedUserDefinedValue(vtkViewport *)
|
|
{ return this->Value; }
|
|
|
|
protected:
|
|
vtkCoordinate();
|
|
~vtkCoordinate();
|
|
|
|
double Value[3];
|
|
int CoordinateSystem;
|
|
vtkCoordinate *ReferenceCoordinate;
|
|
vtkViewport *Viewport;
|
|
double ComputedWorldValue[3];
|
|
int ComputedDisplayValue[2];
|
|
int ComputedViewportValue[2];
|
|
int Computing;
|
|
|
|
double ComputedDoubleDisplayValue[2];
|
|
double ComputedDoubleViewportValue[2];
|
|
double ComputedUserDefinedValue[3];
|
|
|
|
private:
|
|
vtkCoordinate(const vtkCoordinate&); // Not implemented.
|
|
void operator=(const vtkCoordinate&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|
|
|
|
|