Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages

vtkProjectedTerrainPath Class Reference

#include <vtkProjectedTerrainPath.h>

Inheritance diagram for vtkProjectedTerrainPath:

Inheritance graph
[legend]
Collaboration diagram for vtkProjectedTerrainPath:

Collaboration graph
[legend]
List of all members.

Detailed Description

project a polyline onto a terrain

vtkProjectedTerrainPath projects an input polyline onto a terrain. (The terrain is defined by a 2D height image and is the second input to the filter.) The polyline projection is controlled via several modes as follows. 1) Simple mode projects the polyline points onto the terrain, taking into account the height offset instance variable. 2) Non-occluded mode insures that no parts of the polyline are occluded by the terrain (e.g. a line passes through a mountain). This may require recursive subdivision of the polyline. 3) Hug mode insures that the polyine points remain within a constant distance from the surface. This may also require recursive subdivision of the polyline. Note that both non-occluded mode and hug mode also take into account the height offset, so it is possible to create paths that hug terrain a certain distance above it. To use this filter, define two inputs: 1) a polyline, and 2) an image whose scalar values represent a height field. Then specify the mode, and the height offset to use.

An description of the algorithm is as follows. The filter begins by projecting the polyline points to the image (offset by the specified height offset). If the mode is non-occluded or hug, then the maximum error along each line segment is computed and placed into a priority queue. Each line segment is then split at the point of maximum error, and the two new line segments are evaluated for maximum error. This process continues until the line is not occluded by the terrain (non-occluded mode) or satisfies the error on variation from the surface (hug mode). (Note this process is repeated for each polyline in the input. Also, the maximum error is computed in two parts: a maximum positive error and maximum negative error. If the polyline is above the terrain--i.e., the height offset is positive--in non-occluded or hug mode all negative errors are eliminated. If the polyline is below the terrain--i.e., the height offset is negative--in non-occluded or hug mode all positive errors are eliminated.)

Warning:
This algorithm requires the entire input image to be in memory, hence it may not work for extremely large images.

The input height image is assumed to be positioned in the x-y plane so the scalar value is the z-coordinate, height value.

A priority queue is used so that the 1) the total number of line segments can be controlled, and 2) the algorithm can terminate when the errors in the queue are less than the specified error tolerance.

See also:
vtkGreedyTerrainDecimation
Tests:
vtkProjectedTerrainPath (Tests)

Definition at line 80 of file vtkProjectedTerrainPath.h.
typedef vtkPolyDataAlgorithm Superclass
virtual const char * GetClassName ()
virtual int IsA (const char *type)
void PrintSelf (ostream &os, vtkIndent indent)
static int IsTypeOf (const char *type)
static vtkProjectedTerrainPathSafeDownCast (vtkObject *o)
void SetSource (vtkImageData *source)
vtkImageDataGetSource ()
static vtkProjectedTerrainPathNew ()

Public Types

enum  { SIMPLE_PROJECTION = 0, NONOCCLUDED_PROJECTION, HUG_PROJECTION }

Public Member Functions

virtual void SetProjectionMode (int)
virtual int GetProjectionMode ()
void SetProjectionModeToSimple ()
void SetProjectionModeToNonOccluded ()
void SetProjectionModeToHug ()
virtual void SetHeightOffset (double)
virtual double GetHeightOffset ()
virtual void SetHeightTolerance (double)
virtual double GetHeightTolerance ()
virtual void SetMaximumNumberOfLines (vtkIdType)
virtual vtkIdType GetMaximumNumberOfLines ()

Protected Member Functions

 vtkProjectedTerrainPath ()
 ~vtkProjectedTerrainPath ()
virtual int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *)
virtual int FillInputPortInformation (int port, vtkInformation *info)
void GetImageIndex (double x[3], double loc[2], int ij[2])
double GetHeight (double loc[2], int ij[2])
void ComputeError (vtkIdType edgeId)
void RemoveOcclusions ()
void HugTerrain ()
void SplitEdge (vtkIdType eId, double t)

Protected Attributes

int ProjectionMode
double HeightOffset
double HeightTolerance
vtkIdType MaximumNumberOfLines
int Dimensions [3]
int Extent [6]
double Origin [3]
double Spacing [3]
vtkDataArrayHeights
vtkPointsPoints
vtkIdType NumLines
vtkPriorityQueuePositiveLineError
vtkPriorityQueueNegativeLineError
vtkEdgeList * EdgeList


Member Typedef Documentation

typedef vtkPolyDataAlgorithm vtkProjectedTerrainPath::Superclass
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

Definition at line 85 of file vtkProjectedTerrainPath.h.


Member Enumeration Documentation

anonymous enum
 

Enumerator:
SIMPLE_PROJECTION 
NONOCCLUDED_PROJECTION 
HUG_PROJECTION 

Definition at line 100 of file vtkProjectedTerrainPath.h.


Constructor & Destructor Documentation

vtkProjectedTerrainPath::vtkProjectedTerrainPath  )  [protected]
 

vtkProjectedTerrainPath::~vtkProjectedTerrainPath  )  [protected]
 


Member Function Documentation

virtual const char* vtkProjectedTerrainPath::GetClassName  )  [virtual]
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

static int vtkProjectedTerrainPath::IsTypeOf const char *  type  )  [static]
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

virtual int vtkProjectedTerrainPath::IsA const char *  type  )  [virtual]
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

static vtkProjectedTerrainPath* vtkProjectedTerrainPath::SafeDownCast vtkObject o  )  [static]
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

void vtkProjectedTerrainPath::PrintSelf ostream &  os,
vtkIndent  indent
[virtual]
 

Standard methids for printing and determining type information.

Reimplemented from vtkPolyDataAlgorithm.

static vtkProjectedTerrainPath* vtkProjectedTerrainPath::New  )  [static]
 

Instantiate the class.

Reimplemented from vtkPolyDataAlgorithm.

void vtkProjectedTerrainPath::SetSource vtkImageData source  ) 
 

Specify the second input (the terrain) onto which the polyline(s) should be projected.

vtkImageData* vtkProjectedTerrainPath::GetSource  ) 
 

Specify the second input (the terrain) onto which the polyline(s) should be projected.

virtual void vtkProjectedTerrainPath::SetProjectionMode int   )  [virtual]
 

Determine how to control the projection process. Simple projection just projects the original polyline points. Non-occluded projection insures that the polyline does not intersect the terrain surface. Hug projection is similar to non-occulded projection except that produces a path that is nearly parallel to the terrain (within the user specified height tolerance).

virtual int vtkProjectedTerrainPath::GetProjectionMode  )  [virtual]
 

Determine how to control the projection process. Simple projection just projects the original polyline points. Non-occluded projection insures that the polyline does not intersect the terrain surface. Hug projection is similar to non-occulded projection except that produces a path that is nearly parallel to the terrain (within the user specified height tolerance).

void vtkProjectedTerrainPath::SetProjectionModeToSimple  )  [inline]
 

Determine how to control the projection process. Simple projection just projects the original polyline points. Non-occluded projection insures that the polyline does not intersect the terrain surface. Hug projection is similar to non-occulded projection except that produces a path that is nearly parallel to the terrain (within the user specified height tolerance).

Definition at line 112 of file vtkProjectedTerrainPath.h.

void vtkProjectedTerrainPath::SetProjectionModeToNonOccluded  )  [inline]
 

Determine how to control the projection process. Simple projection just projects the original polyline points. Non-occluded projection insures that the polyline does not intersect the terrain surface. Hug projection is similar to non-occulded projection except that produces a path that is nearly parallel to the terrain (within the user specified height tolerance).

Definition at line 114 of file vtkProjectedTerrainPath.h.

void vtkProjectedTerrainPath::SetProjectionModeToHug  )  [inline]
 

Determine how to control the projection process. Simple projection just projects the original polyline points. Non-occluded projection insures that the polyline does not intersect the terrain surface. Hug projection is similar to non-occulded projection except that produces a path that is nearly parallel to the terrain (within the user specified height tolerance).

Definition at line 116 of file vtkProjectedTerrainPath.h.

virtual void vtkProjectedTerrainPath::SetHeightOffset double   )  [virtual]
 

This is the height above (or below) the terrain that the projected path should be. Positive values indicate distances above the terrain; negative values indicate distances below the terrain.

virtual double vtkProjectedTerrainPath::GetHeightOffset  )  [virtual]
 

This is the height above (or below) the terrain that the projected path should be. Positive values indicate distances above the terrain; negative values indicate distances below the terrain.

virtual void vtkProjectedTerrainPath::SetHeightTolerance double   )  [virtual]
 

This is the allowable variation in the altitude of the path with respect to the variation in the terrain. It only comes into play if the hug projection mode is enabled.

virtual double vtkProjectedTerrainPath::GetHeightTolerance  )  [virtual]
 

This is the allowable variation in the altitude of the path with respect to the variation in the terrain. It only comes into play if the hug projection mode is enabled.

virtual void vtkProjectedTerrainPath::SetMaximumNumberOfLines vtkIdType   )  [virtual]
 

This instance variable can be used to limit the total number of line segments created during subdivision. Note that the number of input line segments will be the minimum number that cab be output.

virtual vtkIdType vtkProjectedTerrainPath::GetMaximumNumberOfLines  )  [virtual]
 

This instance variable can be used to limit the total number of line segments created during subdivision. Note that the number of input line segments will be the minimum number that cab be output.

virtual int vtkProjectedTerrainPath::RequestData vtkInformation ,
vtkInformationVector **  ,
vtkInformationVector
[protected, virtual]
 

This is called by the superclass. This is the method you should override.

Reimplemented from vtkPolyDataAlgorithm.

virtual int vtkProjectedTerrainPath::FillInputPortInformation int  port,
vtkInformation info
[protected, virtual]
 

Fill the input port information objects for this algorithm. This is invoked by the first call to GetInputPortInformation for each port so subclasses can specify what they can handle.

Reimplemented from vtkPolyDataAlgorithm.

void vtkProjectedTerrainPath::GetImageIndex double  x[3],
double  loc[2],
int  ij[2]
[protected]
 

double vtkProjectedTerrainPath::GetHeight double  loc[2],
int  ij[2]
[protected]
 

void vtkProjectedTerrainPath::ComputeError vtkIdType  edgeId  )  [protected]
 

void vtkProjectedTerrainPath::RemoveOcclusions  )  [protected]
 

void vtkProjectedTerrainPath::HugTerrain  )  [protected]
 

void vtkProjectedTerrainPath::SplitEdge vtkIdType  eId,
double  t
[protected]
 


Member Data Documentation

int vtkProjectedTerrainPath::ProjectionMode [protected]
 

Definition at line 161 of file vtkProjectedTerrainPath.h.

double vtkProjectedTerrainPath::HeightOffset [protected]
 

Definition at line 162 of file vtkProjectedTerrainPath.h.

double vtkProjectedTerrainPath::HeightTolerance [protected]
 

Definition at line 163 of file vtkProjectedTerrainPath.h.

vtkIdType vtkProjectedTerrainPath::MaximumNumberOfLines [protected]
 

Definition at line 164 of file vtkProjectedTerrainPath.h.

int vtkProjectedTerrainPath::Dimensions[3] [protected]
 

Definition at line 167 of file vtkProjectedTerrainPath.h.

int vtkProjectedTerrainPath::Extent[6] [protected]
 

Definition at line 168 of file vtkProjectedTerrainPath.h.

double vtkProjectedTerrainPath::Origin[3] [protected]
 

Definition at line 169 of file vtkProjectedTerrainPath.h.

double vtkProjectedTerrainPath::Spacing[3] [protected]
 

Definition at line 170 of file vtkProjectedTerrainPath.h.

vtkDataArray* vtkProjectedTerrainPath::Heights [protected]
 

Definition at line 171 of file vtkProjectedTerrainPath.h.

vtkPoints* vtkProjectedTerrainPath::Points [protected]
 

Definition at line 172 of file vtkProjectedTerrainPath.h.

vtkIdType vtkProjectedTerrainPath::NumLines [protected]
 

Definition at line 173 of file vtkProjectedTerrainPath.h.

vtkPriorityQueue* vtkProjectedTerrainPath::PositiveLineError [protected]
 

Definition at line 177 of file vtkProjectedTerrainPath.h.

vtkPriorityQueue* vtkProjectedTerrainPath::NegativeLineError [protected]
 

Definition at line 178 of file vtkProjectedTerrainPath.h.

vtkEdgeList* vtkProjectedTerrainPath::EdgeList [protected]
 

Definition at line 181 of file vtkProjectedTerrainPath.h.


The documentation for this class was generated from the following file:
Generated on Tue Jan 22 00:11:09 2008 for VTK by  doxygen 1.4.3-20050530