vtkCellLocator Class Reference

#include <vtkCellLocator.h>

Inheritance diagram for vtkCellLocator:

Inheritance graph
[legend]
Collaboration diagram for vtkCellLocator:

Collaboration graph
[legend]

List of all members.


Detailed Description

octree-based spatial search object to quickly locate cells

vtkCellLocator is a spatial search object to quickly locate cells in 3D. vtkCellLocator uses a uniform-level octree subdivision, where each octant (an octant is also referred to as a bucket) carries an indication of whether it is empty or not, and each leaf octant carries a list of the cells inside of it. (An octant is not empty if it has one or more cells inside of it.) Typical operations are intersection with a line to return candidate cells, or intersection with another vtkCellLocator to return candidate cells.

Warning:
Many other types of spatial locators have been developed, such as variable depth octrees and kd-trees. These are often more efficient for the operations described here. vtkCellLocator has been designed for subclassing; so these locators can be derived if necessary.
See also:
vtkLocator vtkPointLocator vtkOBBTree
Tests:
vtkCellLocator (Tests)

Definition at line 47 of file vtkCellLocator.h.


Public Types

typedef vtkAbstractCellLocator Superclass

Public Member Functions

virtual const char * GetClassName ()
virtual int IsA (const char *type)
void PrintSelf (ostream &os, vtkIndent indent)
virtual vtkIdListGetCells (int bucket)
virtual int GetNumberOfBuckets (void)
virtual void FindCellsWithinBounds (double *bbox, vtkIdList *cells)
void SetNumberOfCellsPerBucket (int N)
int GetNumberOfCellsPerBucket ()
virtual int IntersectWithLine (double a0[3], double a1[3], double tol, double &t, double x[3], double pcoords[3], int &subId)
virtual int IntersectWithLine (double a0[3], double a1[3], double tol, double &t, double x[3], double pcoords[3], int &subId, vtkIdType &cellId)
virtual int IntersectWithLine (const double a0[3], const double a1[3], vtkPoints *points, vtkIdList *cellIds)
virtual int IntersectWithLine (double a0[3], double a1[3], double tol, double &t, double x[3], double pcoords[3], int &subId, vtkIdType &cellId, vtkGenericCell *cell)
virtual void FindClosestPoint (double x[3], double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2)
virtual void FindClosestPoint (double x[3], double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2)
virtual vtkIdType FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkIdType &cellId, int &subId, double &dist2)
virtual vtkIdType FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2)
virtual vtkIdType FindClosestPointWithinRadius (double x[3], double radius, double closestPoint[3], vtkGenericCell *cell, vtkIdType &cellId, int &subId, double &dist2, int &inside)
virtual void FindCellsAlongLine (double p1[3], double p2[3], double tolerance, vtkIdList *cells)
virtual void FreeSearchStructure ()
virtual void BuildLocator ()
virtual void GenerateRepresentation (int level, vtkPolyData *pd)

Static Public Member Functions

static int IsTypeOf (const char *type)
static vtkCellLocatorSafeDownCast (vtkObject *o)
static vtkCellLocatorNew ()

Protected Member Functions

 vtkCellLocator ()
 ~vtkCellLocator ()
void GetBucketNeighbors (int ijk[3], int ndivs, int level)
void GetOverlappingBuckets (double x[3], int ijk[3], double dist, int prevMinLevel[3], int prevMaxLevel[3])
void ClearCellHasBeenVisited ()
void ClearCellHasBeenVisited (int id)
double Distance2ToBucket (double x[3], int nei[3])
double Distance2ToBounds (double x[3], double bounds[6])
void MarkParents (void *, int, int, int, int, int)
void GetChildren (int idx, int level, int children[8])
int GenerateIndex (int offset, int numDivs, int i, int j, int k, vtkIdType &idx)
void GenerateFace (int face, int numDivs, int i, int j, int k, vtkPoints *pts, vtkCellArray *polys)
void ComputeOctantBounds (int i, int j, int k)
int IsInOctantBounds (double x[3])

Protected Attributes

int NumberOfOctants
double Bounds [6]
int NumberOfParents
double H [3]
int NumberOfDivisions
vtkIdList ** Tree
vtkNeighborCells * Buckets
unsigned char * CellHasBeenVisited
unsigned char QueryNumber
double OctantBounds [6]

Member Typedef Documentation

Reimplemented from vtkAbstractCellLocator.

Definition at line 50 of file vtkCellLocator.h.


Constructor & Destructor Documentation

vtkCellLocator::vtkCellLocator (  )  [protected]

vtkCellLocator::~vtkCellLocator (  )  [protected]


Member Function Documentation

virtual const char* vtkCellLocator::GetClassName (  )  [virtual]

Reimplemented from vtkAbstractCellLocator.

static int vtkCellLocator::IsTypeOf ( const char *  name  )  [static]

Return 1 if this class type is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkAbstractCellLocator.

virtual int vtkCellLocator::IsA ( const char *  name  )  [virtual]

Return 1 if this class is the same type of (or a subclass of) the named class. Returns 0 otherwise. This method works in combination with vtkTypeRevisionMacro found in vtkSetGet.h.

Reimplemented from vtkAbstractCellLocator.

static vtkCellLocator* vtkCellLocator::SafeDownCast ( vtkObject o  )  [static]

Reimplemented from vtkAbstractCellLocator.

void vtkCellLocator::PrintSelf ( ostream &  os,
vtkIndent  indent 
) [virtual]

Methods invoked by print to print information about the object including superclasses. Typically not called by the user (use Print() instead) but used in the hierarchical print process to combine the output of several classes.

Reimplemented from vtkAbstractCellLocator.

static vtkCellLocator* vtkCellLocator::New (  )  [static]

Construct with automatic computation of divisions, averaging 25 cells per bucket.

Reimplemented from vtkObject.

void vtkCellLocator::SetNumberOfCellsPerBucket ( int  N  )  [inline]

Specify the average number of cells in each octant.

Definition at line 59 of file vtkCellLocator.h.

int vtkCellLocator::GetNumberOfCellsPerBucket (  )  [inline]

Specify the average number of cells in each octant.

Definition at line 61 of file vtkCellLocator.h.

virtual int vtkCellLocator::IntersectWithLine ( double  a0[3],
double  a1[3],
double  tol,
double &  t,
double  x[3],
double  pcoords[3],
int &  subId 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 77 of file vtkCellLocator.h.

virtual int vtkCellLocator::IntersectWithLine ( double  a0[3],
double  a1[3],
double  tol,
double &  t,
double  x[3],
double  pcoords[3],
int &  subId,
vtkIdType cellId 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 89 of file vtkCellLocator.h.

virtual int vtkCellLocator::IntersectWithLine ( const double  a0[3],
const double  a1[3],
vtkPoints points,
vtkIdList cellIds 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 101 of file vtkCellLocator.h.

virtual int vtkCellLocator::IntersectWithLine ( double  a0[3],
double  a1[3],
double  tol,
double &  t,
double  x[3],
double  pcoords[3],
int &  subId,
vtkIdType cellId,
vtkGenericCell cell 
) [virtual]

Return intersection point (if any) AND the cell which was intersected by the finite line. The cell is returned as a cell id and as a generic cell. For other IntersectWithLine signatures, see vtkAbstractCellLocator

Reimplemented from vtkAbstractCellLocator.

virtual void vtkCellLocator::FindClosestPoint ( double  x[3],
double  closestPoint[3],
vtkIdType cellId,
int &  subId,
double &  dist2 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 123 of file vtkCellLocator.h.

virtual void vtkCellLocator::FindClosestPoint ( double  x[3],
double  closestPoint[3],
vtkGenericCell cell,
vtkIdType cellId,
int &  subId,
double &  dist2 
) [virtual]

Return the closest point and the cell which is closest to the point x. The closest point is somewhere on a cell, it need not be one of the vertices of the cell. This version takes in a vtkGenericCell to avoid allocating and deallocating the cell. This is much faster than the version which does not take a *cell, especially when this function is called many times in a row such as by a for loop, where the allocation and deallocation can be done only once outside the for loop. If a cell is found, "cell" contains the points and ptIds for the cell "cellId" upon exit.

Reimplemented from vtkAbstractCellLocator.

virtual vtkIdType vtkCellLocator::FindClosestPointWithinRadius ( double  x[3],
double  radius,
double  closestPoint[3],
vtkIdType cellId,
int &  subId,
double &  dist2 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 150 of file vtkCellLocator.h.

virtual vtkIdType vtkCellLocator::FindClosestPointWithinRadius ( double  x[3],
double  radius,
double  closestPoint[3],
vtkGenericCell cell,
vtkIdType cellId,
int &  subId,
double &  dist2 
) [inline, virtual]

reimplemented from vtkAbstractCellLocator to support bad compilers

Reimplemented from vtkAbstractCellLocator.

Definition at line 162 of file vtkCellLocator.h.

virtual vtkIdType vtkCellLocator::FindClosestPointWithinRadius ( double  x[3],
double  radius,
double  closestPoint[3],
vtkGenericCell cell,
vtkIdType cellId,
int &  subId,
double &  dist2,
int &  inside 
) [virtual]

Return the closest point within a specified radius and the cell which is closest to the point x. The closest point is somewhere on a cell, it need not be one of the vertices of the cell. This method returns 1 if a point is found within the specified radius. If there are no cells within the specified radius, the method returns 0 and the values of closestPoint, cellId, subId, and dist2 are undefined. This version takes in a vtkGenericCell to avoid allocating and deallocating the cell. This is much faster than the version which does not take a *cell, especially when this function is called many times in a row such as by a for loop, where the allocation and dealloction can be done only once outside the for loop. If a closest point is found, "cell" contains the points and ptIds for the cell "cellId" upon exit. If a closest point is found, inside returns the return value of the EvaluatePosition call to the closest cell; inside(=1) or outside(=0). For other FindClosestPointWithinRadius signatures, see vtkAbstractCellLocator

Reimplemented from vtkAbstractCellLocator.

virtual vtkIdList* vtkCellLocator::GetCells ( int  bucket  )  [virtual]

Get the cells in a particular bucket.

virtual int vtkCellLocator::GetNumberOfBuckets ( void   )  [virtual]

Return number of buckets available. Insure that the locator has been built before attempting to access buckets (octants).

virtual void vtkCellLocator::FindCellsWithinBounds ( double *  bbox,
vtkIdList cells 
) [virtual]

Return a list of unique cell ids inside of a given bounding box. The user must provide the vtkIdList to populate. This method returns data only after the locator has been built.

Reimplemented from vtkAbstractCellLocator.

virtual void vtkCellLocator::FindCellsAlongLine ( double  p1[3],
double  p2[3],
double  tolerance,
vtkIdList cells 
) [virtual]

Given a finite line defined by the two points (p1,p2), return the list of unique cell ids in the buckets containing the line. It is possible that an empty cell list is returned. The user must provide the vtkIdList to populate. This method returns data only after the locator has been built.

Reimplemented from vtkAbstractCellLocator.

virtual void vtkCellLocator::FreeSearchStructure (  )  [virtual]

Satisfy vtkLocator abstract interface.

Implements vtkLocator.

virtual void vtkCellLocator::BuildLocator (  )  [virtual]

Satisfy vtkLocator abstract interface.

Implements vtkLocator.

virtual void vtkCellLocator::GenerateRepresentation ( int  level,
vtkPolyData pd 
) [virtual]

Satisfy vtkLocator abstract interface.

Implements vtkLocator.

void vtkCellLocator::GetBucketNeighbors ( int  ijk[3],
int  ndivs,
int  level 
) [protected]

void vtkCellLocator::GetOverlappingBuckets ( double  x[3],
int  ijk[3],
double  dist,
int  prevMinLevel[3],
int  prevMaxLevel[3] 
) [protected]

void vtkCellLocator::ClearCellHasBeenVisited (  )  [protected]

void vtkCellLocator::ClearCellHasBeenVisited ( int  id  )  [protected]

double vtkCellLocator::Distance2ToBucket ( double  x[3],
int  nei[3] 
) [protected]

double vtkCellLocator::Distance2ToBounds ( double  x[3],
double  bounds[6] 
) [protected]

void vtkCellLocator::MarkParents ( void *  ,
int  ,
int  ,
int  ,
int  ,
int   
) [protected]

void vtkCellLocator::GetChildren ( int  idx,
int  level,
int  children[8] 
) [protected]

int vtkCellLocator::GenerateIndex ( int  offset,
int  numDivs,
int  i,
int  j,
int  k,
vtkIdType idx 
) [protected]

void vtkCellLocator::GenerateFace ( int  face,
int  numDivs,
int  i,
int  j,
int  k,
vtkPoints pts,
vtkCellArray polys 
) [protected]

void vtkCellLocator::ComputeOctantBounds ( int  i,
int  j,
int  k 
) [protected]

int vtkCellLocator::IsInOctantBounds ( double  x[3]  )  [inline, protected]

Definition at line 259 of file vtkCellLocator.h.


Member Data Documentation

Definition at line 239 of file vtkCellLocator.h.

double vtkCellLocator::Bounds[6] [protected]

Definition at line 240 of file vtkCellLocator.h.

Definition at line 241 of file vtkCellLocator.h.

double vtkCellLocator::H[3] [protected]

Definition at line 242 of file vtkCellLocator.h.

Definition at line 243 of file vtkCellLocator.h.

Definition at line 244 of file vtkCellLocator.h.

vtkNeighborCells* vtkCellLocator::Buckets [protected]

Definition at line 253 of file vtkCellLocator.h.

unsigned char* vtkCellLocator::CellHasBeenVisited [protected]

Definition at line 254 of file vtkCellLocator.h.

unsigned char vtkCellLocator::QueryNumber [protected]

Definition at line 255 of file vtkCellLocator.h.

double vtkCellLocator::OctantBounds[6] [protected]

Definition at line 258 of file vtkCellLocator.h.


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

Generated on Wed Jun 3 18:56:15 2009 for VTK by  doxygen 1.5.6