dox/Common/vtkPointLocator.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00045
#ifndef __vtkPointLocator_h
00046
#define __vtkPointLocator_h
00047
00048
#include "vtkLocator.h"
00049
00050
class vtkCellArray;
00051
class vtkIdList;
00052
class vtkNeighborPoints;
00053
class vtkPoints;
00054
00055 class VTK_COMMON_EXPORT vtkPointLocator :
public vtkLocator
00056 {
00057
public:
00060
static vtkPointLocator *
New();
00061
00062 vtkTypeRevisionMacro(vtkPointLocator,
vtkLocator);
00063
void PrintSelf(ostream& os,
vtkIndent indent);
00064
00066
00067 vtkSetVector3Macro(Divisions,
int);
00068 vtkGetVectorMacro(Divisions,
int,3);
00070
00072
00073 vtkSetClampMacro(NumberOfPointsPerBucket,
int,1,VTK_LARGE_INTEGER);
00074 vtkGetMacro(NumberOfPointsPerBucket,
int);
00076
00078
00082
virtual vtkIdType FindClosestPoint(
const float x[3]);
00083
vtkIdType FindClosestPoint(
float x,
float y,
float z);
00085
00087
00091
vtkIdType FindClosestPointWithinRadius(
float radius,
const float x[3],
00092
float& dist2);
00093
vtkIdType FindClosestPointWithinRadius(
float radius,
const float x[3],
00094
float inputDataLength,
float& dist2);
00096
00101
virtual int InitPointInsertion(
vtkPoints *newPts,
const float bounds[6]);
00102
00104
00108
virtual int InitPointInsertion(
vtkPoints *newPts,
const float bounds[6],
00109
vtkIdType estSize);
00111
00119
virtual void InsertPoint(
vtkIdType ptId,
const float x[3]);
00120
00128
virtual vtkIdType InsertNextPoint(
const float x[3]);
00129
00131
00134 vtkIdType IsInsertedPoint(
float x,
float y,
float z)
00135 {
00136
float xyz[3];
00137 xyz[0] = x; xyz[1] = y; xyz[2] = z;
00138
return this->IsInsertedPoint (xyz);
00139 };
00140
virtual vtkIdType IsInsertedPoint(
const float x[3]);
00142
00150
virtual int InsertUniquePoint(
const float x[3],
vtkIdType &ptId);
00151
00157
virtual vtkIdType FindClosestInsertedPoint(
const float x[3]);
00158
00160
00166
virtual void FindClosestNPoints(
int N,
const float x[3],
vtkIdList *result);
00167
virtual void FindClosestNPoints(
int N,
float x,
float y,
float z,
00168
vtkIdList *result);
00170
00172
00177
virtual void FindDistributedPoints(
int N,
const float x[3],
00178
vtkIdList *result,
int M);
00179
virtual void FindDistributedPoints(
int N,
float x,
float y,
00180
float z,
vtkIdList *result,
int M);
00182
00184
00188
virtual void FindPointsWithinRadius(
float R,
const float x[3],
00189
vtkIdList *result);
00190
virtual void FindPointsWithinRadius(
float R,
float x,
float y,
float z,
00191
vtkIdList *result);
00193
00198
virtual vtkIdList *GetPointsInBucket(
const float x[3],
int ijk[3]);
00199
00201
00203
void Initialize();
00204
void FreeSearchStructure();
00205
void BuildLocator();
00206
void GenerateRepresentation(
int level,
vtkPolyData *pd);
00208
00209
protected:
00210 vtkPointLocator();
00211 ~vtkPointLocator();
00212
00213
00214
void GetBucketNeighbors(vtkNeighborPoints* buckets,
00215
const int ijk[3],
const int ndivs[3],
int level);
00216
void GetOverlappingBuckets(vtkNeighborPoints* buckets,
00217
const float x[3],
const int ijk[3],
float dist,
00218
int level);
00219
void GetOverlappingBuckets(vtkNeighborPoints* buckets,
00220
const float x[3],
float dist,
00221
int prevMinLevel[3],
00222
int prevMaxLevel[3]);
00223
void GenerateFace(
int face,
int i,
int j,
int k,
00224
vtkPoints *pts,
vtkCellArray *polys);
00225
float Distance2ToBucket(
const float x[3],
const int nei[3]);
00226
float Distance2ToBounds(
const float x[3],
const float bounds[6]);
00227
00228 vtkPoints *Points;
00229 int Divisions[3];
00230 int NumberOfPointsPerBucket;
00231 float Bounds[6];
00232 vtkIdList **HashTable;
00233 vtkIdType NumberOfBuckets;
00234 float H[3];
00235
00236 float InsertionTol2;
00237 vtkIdType InsertionPointId;
00238
00239 float InsertionLevel;
00240
private:
00241 vtkPointLocator(
const vtkPointLocator&);
00242
void operator=(
const vtkPointLocator&);
00243 };
00244
00245
#endif
00246
00247