VTK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
vtkHull Class Reference

produce an n-sided convex hull More...

#include <vtkHull.h>

Inherits vtkPolyDataAlgorithm.

Public Types

typedef vtkPolyDataAlgorithm Superclass
 

Public Member Functions

virtual int IsA (const char *type)
 
vtkHullNewInstance () const
 
void PrintSelf (ostream &os, vtkIndent indent)
 
void RemoveAllPlanes (void)
 
void SetPlanes (vtkPlanes *planes)
 
void AddCubeVertexPlanes ()
 
void AddCubeEdgePlanes ()
 
void AddCubeFacePlanes ()
 
void AddRecursiveSpherePlanes (int level)
 
int AddPlane (double A, double B, double C)
 
int AddPlane (double plane[3])
 
void SetPlane (int i, double A, double B, double C)
 
void SetPlane (int i, double plane[3])
 
int AddPlane (double A, double B, double C, double D)
 
int AddPlane (double plane[3], double D)
 
void SetPlane (int i, double A, double B, double C, double D)
 
void SetPlane (int i, double plane[3], double D)
 
virtual int GetNumberOfPlanes ()
 
void GenerateHull (vtkPolyData *pd, double *bounds)
 
void GenerateHull (vtkPolyData *pd, double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
 

Static Public Member Functions

static vtkHullNew ()
 
static int IsTypeOf (const char *type)
 
static vtkHullSafeDownCast (vtkObjectBase *o)
 

Protected Member Functions

virtual vtkObjectBase * NewInstanceInternal () const
 
 vtkHull ()
 
 ~vtkHull ()
 
void ComputePlaneDistances (vtkPolyData *input)
 
void ClipPolygonsFromPlanes (vtkPoints *points, vtkCellArray *polys, double *bounds)
 
void CreateInitialPolygon (double *, int, double *)
 
int RequestData (vtkInformation *, vtkInformationVector **, vtkInformationVector *)
 

Protected Attributes

double * Planes
 
int PlanesStorageSize
 
int NumberOfPlanes
 

Detailed Description

produce an n-sided convex hull

vtkHull is a filter which will produce an n-sided convex hull given a set of n planes. (The convex hull bounds the input polygonal data.) The hull is generated by squeezing the planes towards the input vtkPolyData, until the planes just touch the vtkPolyData. Then, the resulting planes are used to generate a polyhedron (i.e., hull) that is represented by triangles.

The n planes can be defined in a number of ways including 1) manually specifying each plane; 2) choosing the six face planes of the input's bounding box; 3) choosing the eight vertex planes of the input's bounding box; 4) choosing the twelve edge planes of the input's bounding box; and/or 5) using a recursively subdivided octahedron. Note that when specifying planes, the plane normals should point outside of the convex region.

The output of this filter can be used in combination with vtkLODActor to represent a levels-of-detail in the LOD hierarchy. Another use of this class is to manually specify the planes, and then generate the polyhedron from the planes (without squeezing the planes towards the input). The method GenerateHull() is used to do this.

Tests:
vtkHull (Tests)

Definition at line 54 of file vtkHull.h.

Member Typedef Documentation

typedef vtkPolyDataAlgorithm vtkHull::Superclass

Definition at line 58 of file vtkHull.h.

Constructor & Destructor Documentation

vtkHull::vtkHull ( )
protected
vtkHull::~vtkHull ( )
protected

Member Function Documentation

static vtkHull* vtkHull::New ( )
static
static int vtkHull::IsTypeOf ( const char *  type)
static
virtual int vtkHull::IsA ( const char *  type)
virtual
static vtkHull* vtkHull::SafeDownCast ( vtkObjectBase *  o)
static
virtual vtkObjectBase* vtkHull::NewInstanceInternal ( ) const
protectedvirtual
vtkHull* vtkHull::NewInstance ( ) const
void vtkHull::PrintSelf ( ostream &  os,
vtkIndent  indent 
)
void vtkHull::RemoveAllPlanes ( void  )

Remove all planes from the current set of planes.

int vtkHull::AddPlane ( double  A,
double  B,
double  C 
)

Add a plane to the current set of planes. It will be added at the end of the list, and an index that can later be used to set this plane's normal will be returned. The values A, B, C are from the plane equation Ax + By + Cz + D = 0. This vector does not have to have unit length (but it must have a non-zero length!). If a value 0 > i >= -NumberOfPlanes is returned, then the plane is parallel with a previously inserted plane, and |-i-1| is the index of the plane that was previously inserted. If a value i < -NumberOfPlanes is returned, then the plane normal is zero length.

int vtkHull::AddPlane ( double  plane[3])

Add a plane to the current set of planes. It will be added at the end of the list, and an index that can later be used to set this plane's normal will be returned. The values A, B, C are from the plane equation Ax + By + Cz + D = 0. This vector does not have to have unit length (but it must have a non-zero length!). If a value 0 > i >= -NumberOfPlanes is returned, then the plane is parallel with a previously inserted plane, and |-i-1| is the index of the plane that was previously inserted. If a value i < -NumberOfPlanes is returned, then the plane normal is zero length.

void vtkHull::SetPlane ( int  i,
double  A,
double  B,
double  C 
)

Set the normal values for plane i. This is a plane that was already added to the current set of planes with AddPlane(), and is now being modified. The values A, B, C are from the plane equation Ax + By + Cz

  • D = 0. This vector does not have to have unit length. Note that D is set to zero, except in the case of the method taking a vtkPlanes* argument, where it is set to the D value defined there.
void vtkHull::SetPlane ( int  i,
double  plane[3] 
)

Set the normal values for plane i. This is a plane that was already added to the current set of planes with AddPlane(), and is now being modified. The values A, B, C are from the plane equation Ax + By + Cz

  • D = 0. This vector does not have to have unit length. Note that D is set to zero, except in the case of the method taking a vtkPlanes* argument, where it is set to the D value defined there.
int vtkHull::AddPlane ( double  A,
double  B,
double  C,
double  D 
)

Variations of AddPlane()/SetPlane() that allow D to be set. These methods are used when GenerateHull() is used.

int vtkHull::AddPlane ( double  plane[3],
double  D 
)

Variations of AddPlane()/SetPlane() that allow D to be set. These methods are used when GenerateHull() is used.

void vtkHull::SetPlane ( int  i,
double  A,
double  B,
double  C,
double  D 
)

Variations of AddPlane()/SetPlane() that allow D to be set. These methods are used when GenerateHull() is used.

void vtkHull::SetPlane ( int  i,
double  plane[3],
double  D 
)

Variations of AddPlane()/SetPlane() that allow D to be set. These methods are used when GenerateHull() is used.

void vtkHull::SetPlanes ( vtkPlanes *  planes)

Set all the planes at once using a vtkPlanes implicit function. This also sets the D value, so it can be used with GenerateHull().

virtual int vtkHull::GetNumberOfPlanes ( )
virtual

Get the number of planes in the current set of planes.

void vtkHull::AddCubeVertexPlanes ( )

Add the 8 planes that represent the vertices of a cube - the combination of the three face planes connecting to a vertex - (1,1,1), (1,1,-1), (1,-1,1), (1,-1,1), (-1,1,1), (-1,1,-1), (-1,-1,1), (-1,-1-1).

void vtkHull::AddCubeEdgePlanes ( )

Add the 12 planes that represent the edges of a cube - halfway between the two connecting face planes - (1,1,0), (-1,-1,0), (-1,1,0), (1,-1,0), (0,1,1), (0,-1,-1), (0,1,-1), (0,-1,1), (1,0,1), (-1,0,-1), (1,0,-1), (-1,0,1)

void vtkHull::AddCubeFacePlanes ( )

Add the six planes that make up the faces of a cube - (1,0,0), (-1, 0, 0), (0,1,0), (0,-1,0), (0,0,1), (0,0,-1)

void vtkHull::AddRecursiveSpherePlanes ( int  level)

Add the planes that represent the normals of the vertices of a polygonal sphere formed by recursively subdividing the triangles in an octahedron. Each triangle is subdivided by connecting the midpoints of the edges thus forming 4 smaller triangles. The level indicates how many subdivisions to do with a level of 0 used to add the 6 planes from the original octahedron, level 1 will add 18 planes, and so on.

void vtkHull::GenerateHull ( vtkPolyData *  pd,
double *  bounds 
)

A special method that is used to generate a polyhedron directly from a set of n planes. The planes that are supplied by the user are not squeezed towards the input data (in fact the user need not specify an input). To use this method, you must provide an instance of vtkPolyData into which the points and cells defining the polyhedron are placed. You must also provide a bounding box where you expect the resulting polyhedron to lie. This can be a very generous fit, it's only used to create the initial polygons that are eventually clipped.

void vtkHull::GenerateHull ( vtkPolyData *  pd,
double  xmin,
double  xmax,
double  ymin,
double  ymax,
double  zmin,
double  zmax 
)

A special method that is used to generate a polyhedron directly from a set of n planes. The planes that are supplied by the user are not squeezed towards the input data (in fact the user need not specify an input). To use this method, you must provide an instance of vtkPolyData into which the points and cells defining the polyhedron are placed. You must also provide a bounding box where you expect the resulting polyhedron to lie. This can be a very generous fit, it's only used to create the initial polygons that are eventually clipped.

void vtkHull::ComputePlaneDistances ( vtkPolyData *  input)
protected
void vtkHull::ClipPolygonsFromPlanes ( vtkPoints *  points,
vtkCellArray *  polys,
double *  bounds 
)
protected
void vtkHull::CreateInitialPolygon ( double *  ,
int  ,
double *   
)
protected
int vtkHull::RequestData ( vtkInformation *  ,
vtkInformationVector **  ,
vtkInformationVector *   
)
protected

Member Data Documentation

double* vtkHull::Planes
protected

Definition at line 151 of file vtkHull.h.

int vtkHull::PlanesStorageSize
protected

Definition at line 156 of file vtkHull.h.

int vtkHull::NumberOfPlanes
protected

Definition at line 159 of file vtkHull.h.


The documentation for this class was generated from the following file: