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.
303 lines
10 KiB
303 lines
10 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkViewport.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 vtkViewport - abstract specification for Viewports
|
|
// .SECTION Description
|
|
// vtkViewport provides an abstract specification for Viewports. A Viewport
|
|
// is an object that controls the rendering process for objects. Rendering
|
|
// is the process of converting geometry, a specification for lights, and
|
|
// a camera view into an image. vtkViewport also performs coordinate
|
|
// transformation between world coordinates, view coordinates (the computer
|
|
// graphics rendering coordinate system), and display coordinates (the
|
|
// actual screen coordinates on the display device). Certain advanced
|
|
// rendering features such as two-sided lighting can also be controlled.
|
|
|
|
// .SECTION See Also
|
|
// vtkWindow vtkRenderer
|
|
|
|
#ifndef __vtkViewport_h
|
|
#define __vtkViewport_h
|
|
|
|
#include "vtkObject.h"
|
|
|
|
class vtkActor2DCollection;
|
|
class vtkAssemblyPath;
|
|
class vtkProp;
|
|
class vtkPropCollection;
|
|
class vtkWindow;
|
|
|
|
class VTK_FILTERING_EXPORT vtkViewport : public vtkObject
|
|
{
|
|
public:
|
|
vtkTypeRevisionMacro(vtkViewport,vtkObject);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Add a prop to the list of props. Prop is the superclass of all
|
|
// actors, volumes, 2D actors, composite props etc.
|
|
void AddViewProp(vtkProp *);
|
|
|
|
// Description:
|
|
// Return any props in this viewport.
|
|
vtkPropCollection *GetViewProps() {return this->Props;};
|
|
|
|
// Description:
|
|
// Query if a prop is in the list of props.
|
|
int HasViewProp(vtkProp *);
|
|
|
|
// Description:
|
|
// Remove an actor from the list of actors.
|
|
void RemoveViewProp(vtkProp *);
|
|
|
|
// Description:
|
|
// Remove all actors from the list of actors.
|
|
void RemoveAllViewProps(void);
|
|
|
|
// Description:
|
|
// Add/Remove different types of props to the renderer.
|
|
// These methods are all synonyms to AddViewProp and RemoveViewProp.
|
|
// They are here for convenience and backwards compatibility.
|
|
void AddActor2D(vtkProp* p);
|
|
void RemoveActor2D(vtkProp* p);
|
|
vtkActor2DCollection *GetActors2D();
|
|
|
|
// Description:
|
|
// Set/Get the background color of the rendering screen using an rgb color
|
|
// specification.
|
|
vtkSetVector3Macro(Background,double);
|
|
vtkGetVector3Macro(Background,double);
|
|
|
|
// Description:
|
|
// Set the aspect ratio of the rendered image. This is computed
|
|
// automatically and should not be set by the user.
|
|
vtkSetVector2Macro(Aspect,double);
|
|
vtkGetVectorMacro(Aspect,double,2);
|
|
virtual void ComputeAspect();
|
|
|
|
// Description:
|
|
// Set the aspect ratio of a pixel in the rendered image.
|
|
// This factor permits the image to rendered anisotropically
|
|
// (i.e., stretched in one direction or the other).
|
|
vtkSetVector2Macro(PixelAspect,double);
|
|
vtkGetVectorMacro(PixelAspect,double,2);
|
|
|
|
// Description:
|
|
// Specify the viewport for the Viewport to draw in the rendering window.
|
|
// Coordinates are expressed as (xmin,ymin,xmax,ymax), where each
|
|
// coordinate is 0 <= coordinate <= 1.0.
|
|
vtkSetVector4Macro(Viewport,double);
|
|
vtkGetVectorMacro(Viewport,double,4);
|
|
|
|
// Description:
|
|
// Set/get a point location in display (or screen) coordinates.
|
|
// The lower left corner of the window is the origin and y increases
|
|
// as you go up the screen.
|
|
vtkSetVector3Macro(DisplayPoint,double);
|
|
vtkGetVectorMacro(DisplayPoint,double,3);
|
|
|
|
// Description:
|
|
// Specify a point location in view coordinates. The origin is in the
|
|
// middle of the viewport and it extends from -1 to 1 in all three
|
|
// dimensions.
|
|
vtkSetVector3Macro(ViewPoint,double);
|
|
vtkGetVectorMacro(ViewPoint,double,3);
|
|
|
|
// Description:
|
|
// Specify a point location in world coordinates. This method takes
|
|
// homogeneous coordinates.
|
|
vtkSetVector4Macro(WorldPoint,double);
|
|
vtkGetVectorMacro(WorldPoint,double,4);
|
|
|
|
// Description:
|
|
// Return the center of this viewport in display coordinates.
|
|
virtual double *GetCenter();
|
|
|
|
// Description:
|
|
// Is a given display point in this Viewport's viewport.
|
|
virtual int IsInViewport(int x,int y);
|
|
|
|
// Description:
|
|
// Return the vtkWindow that owns this vtkViewport.
|
|
virtual vtkWindow *GetVTKWindow() = 0;
|
|
|
|
// Description:
|
|
// Convert display coordinates to view coordinates.
|
|
virtual void DisplayToView(); // these get modified in subclasses
|
|
|
|
// Description:
|
|
// Convert view coordinates to display coordinates.
|
|
virtual void ViewToDisplay(); // to handle stereo rendering
|
|
|
|
// Description:
|
|
// Convert world point coordinates to view coordinates.
|
|
virtual void WorldToView();
|
|
|
|
// Description:
|
|
// Convert view point coordinates to world coordinates.
|
|
virtual void ViewToWorld();
|
|
|
|
// Description:
|
|
// Convert display (or screen) coordinates to world coordinates.
|
|
void DisplayToWorld() {this->DisplayToView(); this->ViewToWorld();};
|
|
|
|
// Description:
|
|
// Convert world point coordinates to display (or screen) coordinates.
|
|
void WorldToDisplay() {this->WorldToView(); this->ViewToDisplay();};
|
|
|
|
// Description:
|
|
// These methods map from one coordinate system to another.
|
|
// They are primarily used by the vtkCoordinate object and
|
|
// are often strung together. These methods return valid information
|
|
// only if the window has been realized (e.g., GetSize() returns
|
|
// something other than (0,0)).
|
|
virtual void LocalDisplayToDisplay(double &x, double &y);
|
|
virtual void DisplayToNormalizedDisplay(double &u, double &v);
|
|
virtual void NormalizedDisplayToViewport(double &x, double &y);
|
|
virtual void ViewportToNormalizedViewport(double &u, double &v);
|
|
virtual void NormalizedViewportToView(double &x, double &y, double &z);
|
|
virtual void ViewToWorld(double &, double &, double &) {};
|
|
virtual void DisplayToLocalDisplay(double &x, double &y);
|
|
virtual void NormalizedDisplayToDisplay(double &u, double &v);
|
|
virtual void ViewportToNormalizedDisplay(double &x, double &y);
|
|
virtual void NormalizedViewportToViewport(double &u, double &v);
|
|
virtual void ViewToNormalizedViewport(double &x, double &y, double &z);
|
|
virtual void WorldToView(double &, double &, double &) {};
|
|
|
|
// Description:
|
|
// Get the size and origin of the viewport in display coordinates. Note:
|
|
// if the window has not yet been realized, GetSize() and GetOrigin()
|
|
// return (0,0).
|
|
int *GetSize();
|
|
int *GetOrigin();
|
|
void GetTiledSize(int *width, int *height);
|
|
void GetTiledSizeAndOrigin(int *width, int *height,
|
|
int *lowerLeftX, int *lowerLeftY);
|
|
|
|
// The following methods describe the public pick interface for picking
|
|
// Props in a viewport.
|
|
|
|
// Description:
|
|
// Return the Prop that has the highest z value at the given x, y position
|
|
// in the viewport. Basically, the top most prop that renders the pixel at
|
|
// selectionX, selectionY will be returned. If no Props are there NULL is
|
|
// returned. This method selects from the Viewports Prop list.
|
|
virtual vtkAssemblyPath* PickProp(double selectionX, double selectionY) = 0;
|
|
|
|
// Description:
|
|
// Same as PickProp with two arguments, but selects from the given
|
|
// collection of Props instead of the Renderers props. Make sure
|
|
// the Props in the collection are in this renderer.
|
|
vtkAssemblyPath* PickPropFrom(double selectionX, double selectionY,
|
|
vtkPropCollection*);
|
|
|
|
// Description:
|
|
// Methods used to return the pick (x,y) in local display coordinates (i.e.,
|
|
// it's that same as selectionX and selectionY).
|
|
vtkGetMacro(PickX, double);
|
|
vtkGetMacro(PickY, double);
|
|
vtkGetMacro(IsPicking, int);
|
|
|
|
// Description:
|
|
// Return the Z value for the last picked Prop.
|
|
virtual double GetPickedZ() = 0;
|
|
|
|
#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
|
|
# define RemovePropA RemoveProp
|
|
# define RemovePropW RemoveProp
|
|
#endif
|
|
|
|
// Description:
|
|
// @deprecated Replaced by vtkViewport::RemoveViewProp() as of VTK 5.0.
|
|
VTK_LEGACY(void RemoveProp(vtkProp*));
|
|
|
|
#ifdef VTK_WORKAROUND_WINDOWS_MANGLE
|
|
# undef RemovePropA
|
|
# undef RemovePropW
|
|
//BTX
|
|
VTK_LEGACY(void RemovePropA(vtkProp*));
|
|
VTK_LEGACY(void RemovePropW(vtkProp*));
|
|
//ETX
|
|
#endif
|
|
|
|
// Description:
|
|
// @deprecated Replaced by vtkViewport::AddViewProp() as of VTK 5.0.
|
|
VTK_LEGACY(void AddProp(vtkProp *));
|
|
|
|
// Description:
|
|
// @deprecated Replaced by vtkViewport::GetViewProps() as of VTK 5.0.
|
|
VTK_LEGACY(vtkPropCollection *GetProps());
|
|
|
|
// Description:
|
|
// @deprecated Replaced by vtkViewport::HasViewProp() as of VTK 5.0.
|
|
VTK_LEGACY(int HasProp(vtkProp *));
|
|
|
|
// Description:
|
|
// @deprecated Replaced by vtkViewport::RemoveAllViewProps() as of VTK 5.0.
|
|
VTK_LEGACY(void RemoveAllProps());
|
|
|
|
protected:
|
|
// Create a vtkViewport with a black background, a white ambient light,
|
|
// two-sided lighting turned on, a viewport of (0,0,1,1), and back face
|
|
// culling turned off.
|
|
vtkViewport();
|
|
~vtkViewport();
|
|
|
|
//BTX
|
|
// Picking functions to be implemented by sub-classes
|
|
// Perform the main picking loop
|
|
virtual void DevicePickRender() = 0;
|
|
// Enter a pick mode
|
|
virtual void StartPick(unsigned int pickFromSize) = 0;
|
|
// Set the pick id to the next id before drawing an object
|
|
virtual void UpdatePickId() = 0;
|
|
// Exit Pick mode
|
|
virtual void DonePick() = 0;
|
|
// Return the id of the picked object, only valid after a call to DonePick
|
|
virtual unsigned int GetPickedId() = 0;
|
|
//ETX
|
|
|
|
// Ivars for picking
|
|
// Store a picked Prop (contained in an assembly path)
|
|
vtkAssemblyPath* PickedProp;
|
|
vtkPropCollection* PickFromProps;
|
|
// Boolean flag to determine if picking is enabled for this render
|
|
int IsPicking;
|
|
unsigned int CurrentPickId;
|
|
double PickX;
|
|
double PickY;
|
|
// End Ivars for picking
|
|
|
|
vtkPropCollection *Props;
|
|
vtkActor2DCollection *Actors2D;
|
|
vtkWindow *VTKWindow;
|
|
double Background[3];
|
|
double Viewport[4];
|
|
double Aspect[2];
|
|
double PixelAspect[2];
|
|
double Center[2];
|
|
|
|
int Size[2];
|
|
int Origin[2];
|
|
double DisplayPoint[3];
|
|
double ViewPoint[3];
|
|
double WorldPoint[4];
|
|
|
|
private:
|
|
vtkViewport(const vtkViewport&); // Not implemented.
|
|
void operator=(const vtkViewport&); // Not implemented.
|
|
};
|
|
|
|
|
|
|
|
#endif
|
|
|