VTK  9.1.0
vtkKdTree.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkKdTree.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 /*----------------------------------------------------------------------------
16  Copyright (c) Sandia Corporation
17  See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
18 ----------------------------------------------------------------------------*/
19 
115 #ifndef vtkKdTree_h
116 #define vtkKdTree_h
117 
118 #include "vtkCommonDataModelModule.h" // For export macro
119 #include "vtkLocator.h"
120 
121 class vtkTimerLog;
122 class vtkIdList;
123 class vtkIdTypeArray;
124 class vtkIntArray;
125 class vtkPointSet;
126 class vtkPoints;
127 class vtkCellArray;
128 class vtkCell;
129 class vtkKdNode;
130 class vtkBSPCuts;
131 class vtkBSPIntersections;
133 
134 class VTKCOMMONDATAMODEL_EXPORT vtkKdTree : public vtkLocator
135 {
136 public:
137  vtkTypeMacro(vtkKdTree, vtkLocator);
138  void PrintSelf(ostream& os, vtkIndent indent) override;
139 
140  static vtkKdTree* New();
141 
143 
146  vtkBooleanMacro(Timing, vtkTypeBool);
147  vtkSetMacro(Timing, vtkTypeBool);
148  vtkGetMacro(Timing, vtkTypeBool);
150 
152 
155  vtkSetMacro(MinCells, int);
156  vtkGetMacro(MinCells, int);
158 
166  vtkGetMacro(NumberOfRegionsOrLess, int);
167  vtkSetMacro(NumberOfRegionsOrLess, int);
168 
176  vtkGetMacro(NumberOfRegionsOrMore, int);
177  vtkSetMacro(NumberOfRegionsOrMore, int);
178 
186  vtkGetMacro(FudgeFactor, double);
187  vtkSetMacro(FudgeFactor, double);
188 
194  vtkGetObjectMacro(Cuts, vtkBSPCuts);
195 
202  void SetCuts(vtkBSPCuts* cuts);
203 
208 
213 
218 
223 
228 
233 
238 
253  void SetDataSet(vtkDataSet* set) override;
254 
259  virtual void AddDataSet(vtkDataSet* set);
260 
262 
265  virtual void RemoveDataSet(int index);
266  virtual void RemoveDataSet(vtkDataSet* set);
267  virtual void RemoveAllDataSets();
269 
274 
285 
290  vtkDataSet* GetDataSet() override { return this->GetDataSet(0); }
291 
293 
296  vtkGetObjectMacro(DataSets, vtkDataSetCollection);
298 
304 
309  void GetBounds(double* bounds);
310 
319  void SetNewBounds(double* bounds);
320 
322 
325  vtkGetMacro(NumberOfRegions, int);
327 
331  void GetRegionBounds(int regionID, double bounds[6]);
332 
336  void GetRegionDataBounds(int regionID, double bounds[6]);
337 
339 
342  void PrintTree();
345 
349  void PrintRegion(int id);
350 
363  void CreateCellLists(int dataSetIndex, int* regionReqList, int reqListSize);
364  void CreateCellLists(vtkDataSet* set, int* regionReqList, int reqListSize);
365  void CreateCellLists(int* regionReqList, int listSize);
367 
369 
376  vtkSetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
377  vtkGetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
378  vtkBooleanMacro(IncludeRegionBoundaryCells, vtkTypeBool);
380 
385 
390  vtkIdList* GetCellList(int regionID);
391 
403 
405 
426  vtkIntArray* regions, int set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
428  vtkIntArray* regions, vtkDataSet* set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
430  vtkIntArray* regions, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
432 
434 
441  int GetRegionContainingCell(int set, vtkIdType cellID);
444 
454 
458  int GetRegionContainingPoint(double x, double y, double z);
459 
465  void BuildLocator() override;
466 
481  int MinimalNumberOfConvexSubRegions(vtkIntArray* regionIdList, double** convexRegionBounds);
482 
491  const double directionOfProjection[3], vtkIntArray* orderedList);
492 
501  vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
502 
511  const double directionOfProjection[3], vtkIntArray* orderedList);
512 
521  vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
522 
524 
539  void BuildLocatorFromPoints(vtkPoints** ptArray, int numPtArrays);
541 
557 
559 
564  vtkIdType FindPoint(double* x);
565  vtkIdType FindPoint(double x, double y, double z);
567 
569 
574  vtkIdType FindClosestPoint(double* x, double& dist2);
575  vtkIdType FindClosestPoint(double x, double y, double z, double& dist2);
577 
583  vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2);
584 
586 
591  vtkIdType FindClosestPointInRegion(int regionId, double* x, double& dist2);
592  vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
594 
601  void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result);
602 
611  void FindClosestNPoints(int N, const double x[3], vtkIdList* result);
612 
618 
623  void FreeSearchStructure() override;
624 
630  void GenerateRepresentation(int level, vtkPolyData* pd) override;
631 
636  void GenerateRepresentation(int* regionList, int len, vtkPolyData* pd);
637 
639 
645  vtkBooleanMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
646  vtkSetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
647  vtkGetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
649 
653  virtual void PrintTiming(ostream& os, vtkIndent indent);
654 
659  virtual int NewGeometry();
660 
666  virtual int NewGeometry(vtkDataSet** sets, int numDataSets);
667 
673  virtual void InvalidateGeometry();
674 
681 
688  void FindPointsInArea(double* area, vtkIdTypeArray* ids, bool clearArray = true);
689 
690 protected:
692  ~vtkKdTree() override;
693 
696 
698 
699  int ProcessUserDefinedCuts(double* bounds);
700 
701  void SetCuts(vtkBSPCuts* cuts, int userDefined);
702 
709 
717  int DivideTest(int numberOfPoints, int level);
718 
719  enum
720  {
721  XDIM = 0, // don't change these values
722  YDIM = 1,
723  ZDIM = 2
724  };
725 
727 
729  vtkKdNode** RegionList; // indexed by region ID
730 
732 
733  static void DeleteAllDescendants(vtkKdNode* nd);
734 
736  virtual int SelectCutDirection(vtkKdNode* kd);
737  void SetActualLevel() { this->Level = vtkKdTree::ComputeLevel(this->Top); }
738 
744  void GetRegionsAtLevel(int level, vtkKdNode** nodes);
745 
751  static void GetLeafNodeIds(vtkKdNode* node, vtkIntArray* ids);
752 
758 
764  int GetDataSetsNumberOfCells(int set1, int set2);
765 
772  void ComputeCellCenter(vtkDataSet* set, int cellId, float* center);
773  void ComputeCellCenter(vtkDataSet* set, int cellId, double* center);
774 
785  float* ComputeCellCenters(int set);
787 
789 
795  void UpdateProgress(double amount);
796 
798 
801  vtkSetClampMacro(Progress, double, 0.0, 1.0);
802  vtkGetMacro(Progress, double);
804 
805 protected:
806  // So that each suboperation can report progress
807  // in [0,1], yet we will be able to report a global
808  // progress. Sub-operations must use UpdateSubOperationProgress()
809  // for this to work.
812 
813  // Update progress for a sub-operation. \c amount goes from 0.0 to 1.0.
814  // Actual progress is given by
815  // (this->ProgressOffset + this->ProgressScale* amount).
816  void UpdateSubOperationProgress(double amount);
817 
818  static void _SetNewBounds(vtkKdNode* kd, double* b, int* fixDim);
819  static void CopyChildNodes(vtkKdNode* to, vtkKdNode* from);
820  static void CopyKdNode(vtkKdNode* to, vtkKdNode* from);
822  static void ZeroNumberOfPoints(vtkKdNode* kd);
823 
824  // Recursive helper for public FindPointsWithinRadius
825  void FindPointsWithinRadius(vtkKdNode* node, double R2, const double x[3], vtkIdList* ids);
826 
827  // Recursive helper for public FindPointsWithinRadius
829 
830  // Recursive helper for public FindPointsInArea
831  void FindPointsInArea(vtkKdNode* node, double* area, vtkIdTypeArray* ids);
832 
833  // Recursive helper for public FindPointsInArea
835 
836  int DivideRegion(vtkKdNode* kd, float* c1, int* ids, int nlevels);
837 
838  void DoMedianFind(vtkKdNode* kd, float* c1, int* ids, int d1, int d2, int d3);
839 
841 
842  struct _cellList
843  {
844  vtkDataSet* dataSet; // cell lists for which data set
845  int* regionIds; // nullptr if listing all regions
846  int nRegions;
850  };
851 
853  vtkIdList* GetList(int regionId, vtkIdList** which);
854 
855  void ComputeCellCenter(vtkCell* cell, double* center, double* weights);
856 
859  vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
860 
863  vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
864 
865  void AddPolys(vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys);
866 
867  void _printTree(int verbose);
868 
870  int regionId, float* point, int** pointsSoFar, int* len, float tolerance, float tolerance2);
871 
872  int SearchRegionForDuplicate(float* point, int* pointsSoFar, int len, float tolerance2);
873 
874  int _FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
875 
877  double x, double y, double z, double radius, int skipRegion, double& dist2);
878 
880  vtkIntArray* IdsOfInterest, const double dop[3], vtkIntArray* orderedList);
881 
883  vtkIntArray* IdsOfInterest, const double dir[3], int nextId);
884 
886  vtkIntArray* IdsOfInterest, const double pos[3], vtkIntArray* orderedList);
887 
889  vtkIntArray* IdsOfInterest, const double pos[3], int nextId);
890 
891  static int __ConvexSubRegions(int* ids, int len, vtkKdNode* tree, vtkKdNode** nodes);
892  static int FoundId(vtkIntArray* idArray, int id);
893 
894  void SetInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
895  int CheckInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
897 
898  static void __printTree(vtkKdNode* kd, int depth, int verbose);
899 
900  static int MidValue(int dim, float* c1, int nvals, double& coord);
901 
902  static int Select(int dim, float* c1, int* ids, int nvals, double& coord);
903  static float FindMaxLeftHalf(int dim, float* c1, int K);
904  static void _Select(int dim, float* X, int* ids, int L, int R, int K);
905 
906  static int ComputeLevel(vtkKdNode* kd);
907  static int SelfOrder(int id, vtkKdNode* kd);
908  static int findRegion(vtkKdNode* node, float x, float y, float z);
909  static int findRegion(vtkKdNode* node, double x, double y, double z);
910 
911  static vtkKdNode** _GetRegionsAtLevel(int level, vtkKdNode** nodes, vtkKdNode* kd);
912 
913  static void AddNewRegions(vtkKdNode* kd, float* c1, int midpt, int dim, double coord);
914 
915  void NewPartitioningRequest(int req);
916 
919 
921  double CellBoundsCache[6]; // to optimize IntersectsCell()
922 
923  vtkTypeBool GenerateRepresentationUsingDataBounds;
924 
925  struct _cellList CellList;
926 
927  // Region Ids, by data set by cell id - this list is large (one
928  // int per cell) but accelerates creation of cell lists
929 
931 
932  int MinCells;
933  int NumberOfRegions; // number of leaf nodes
934 
936  double FudgeFactor; // a very small distance, relative to the dataset's size
937 
938  // These instance variables are used by the special locator created
939  // to find duplicate points. (BuildLocatorFromPoints)
940 
945 
946  float MaxWidth;
947 
948  // These Last* values are here to save state so we can
949  // determine later if k-d tree must be rebuilt.
950 
954  unsigned long* LastDataSetObserverTags;
957  double* LastBounds;
960 
962  double Progress;
963 
964  vtkKdTree(const vtkKdTree&) = delete;
965  void operator=(const vtkKdTree&) = delete;
966 };
967 #endif
This class represents an axis-aligned Binary Spatial Partitioning of a 3D space.
Definition: vtkBSPCuts.h:45
Perform calculations (mostly intersection calculations) on regions of a 3D binary spatial partitionin...
object to represent cell connectivity
Definition: vtkCellArray.h:290
abstract class to specify cell behavior
Definition: vtkCell.h:147
maintain an unordered list of dataset objects
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
list of point or cell ids
Definition: vtkIdList.h:140
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:113
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:149
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning.
Definition: vtkKdNode.h:43
a Kd-tree spatial decomposition of a set of points
Definition: vtkKdTree.h:135
void SelfRegister(vtkKdNode *kd)
void NewPartitioningRequest(int req)
void SetInputDataInfo(int i, int dims[3], double origin[3], double spacing[3])
virtual void RemoveAllDataSets()
Remove the given data set.
static vtkKdNode * CopyTree(vtkKdNode *kd)
Create a copy of the binary tree representation of the k-d tree spatial partitioning provided.
static void __printTree(vtkKdNode *kd, int depth, int verbose)
float * ComputeCellCenters()
Compute and return a pointer to a list of all cell centers, in order by data set by cell Id.
int * LastDataSetType
Definition: vtkKdTree.h:955
vtkTypeBool Timing
Definition: vtkKdTree.h:935
int DivideRegion(vtkKdNode *kd, float *c1, int *ids, int nlevels)
static void CopyKdNode(vtkKdNode *to, vtkKdNode *from)
static void _SetNewBounds(vtkKdNode *kd, double *b, int *fixDim)
int MinimalNumberOfConvexSubRegions(vtkIntArray *regionIdList, double **convexRegionBounds)
Given a list of region IDs, determine the decomposition of these regions into the minimal number of c...
float * ComputeCellCenters(int set)
vtkDataSetCollection * DataSets
Definition: vtkKdTree.h:788
void CreateCellLists(int *regionReqList, int listSize)
int ValidDirections
Definition: vtkKdTree.h:726
vtkIdType FindPoint(double x, double y, double z)
Find the Id of the point that was previously supplied to BuildLocatorFromPoints().
int NumberOfRegions
Definition: vtkKdTree.h:933
int GetRegionContainingCell(vtkIdType cellID)
Get the id of the region containing the cell centroid.
void GetRegionDataBounds(int regionID, double bounds[6])
Get the bounds of the data within the k-d tree region.
void InitializeCellLists()
virtual void InvalidateGeometry()
Forget about the last geometry used.
void OmitYZPartitioning()
Omit partitions along the Y and Z axes, yielding slabs along X.
vtkTypeBool IncludeRegionBoundaryCells
Definition: vtkKdTree.h:920
static int SelfOrder(int id, vtkKdNode *kd)
void OmitZXPartitioning()
Omit partitions along the Z and X axes, yielding slabs along Y.
vtkIdType GetCellLists(vtkIntArray *regions, vtkDataSet *set, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
For a list of regions, get two cell lists.
int LastDataCacheSize
Definition: vtkKdTree.h:952
float MaxWidth
Definition: vtkKdTree.h:946
vtkIdType GetCellLists(vtkIntArray *regions, int set, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
For a list of regions, get two cell lists.
void BuildRegionList()
int _ViewOrderRegionsInDirection(vtkIntArray *IdsOfInterest, const double dop[3], vtkIntArray *orderedList)
void OmitNoPartitioning()
Partition along all three axes - this is the default.
static vtkKdNode ** _GetRegionsAtLevel(int level, vtkKdNode **nodes, vtkKdNode *kd)
void _printTree(int verbose)
int GetNumberOfCells()
Returns the total number of cells in all the data sets.
void GenerateRepresentationDataBounds(int level, vtkPolyData *pd)
void SetDataSet(vtkDataSet *set) override
This class can compute a spatial decomposition based on the cells in a list of one or more input data...
int NumberOfRegionsOrLess
Definition: vtkKdTree.h:917
static int Select(int dim, float *c1, int *ids, int nvals, double &coord)
void UpdateSubOperationProgress(double amount)
vtkIdTypeArray * BuildMapForDuplicatePoints(float tolerance)
This call returns a mapping from the original point IDs supplied to BuildLocatorFromPoints to a subse...
vtkIdTypeArray * GetPointsInRegion(int regionId)
Get a list of the original IDs of all points in a region.
void CreateCellLists()
vtkDataSet ** LastInputDataSets
Definition: vtkKdTree.h:953
void ComputeCellCenter(vtkCell *cell, double *center, double *weights)
double * LastInputDataInfo
Definition: vtkKdTree.h:956
vtkBSPCuts * Cuts
Definition: vtkKdTree.h:961
vtkBSPIntersections * BSPCalculator
Definition: vtkKdTree.h:694
void SetCuts(vtkBSPCuts *cuts, int userDefined)
vtkKdNode ** RegionList
Definition: vtkKdTree.h:729
int SearchNeighborsForDuplicate(int regionId, float *point, int **pointsSoFar, int *len, float tolerance, float tolerance2)
void GenerateRepresentation(int level, vtkPolyData *pd) override
Create a polydata representation of the boundaries of the k-d tree regions.
void AddAllPointsInRegion(vtkKdNode *node, vtkIdList *ids)
int LastNumDataSets
Definition: vtkKdTree.h:951
static float FindMaxLeftHalf(int dim, float *c1, int K)
int * LocatorRegionLocation
Definition: vtkKdTree.h:944
void CreateCellLists(int dataSetIndex, int *regionReqList, int reqListSize)
Create a list for each of the requested regions, listing the IDs of all cells whose centroid falls in...
vtkIdList * GetList(int regionId, vtkIdList **which)
void PrintTree()
Print out nodes of kd tree.
void FreeSearchStructure() override
Delete the k-d tree data structure.
virtual void RemoveDataSet(vtkDataSet *set)
Remove the given data set.
int CheckInputDataInfo(int i, int dims[3], double origin[3], double spacing[3])
virtual int NewGeometry(vtkDataSet **sets, int numDataSets)
Return 1 if the geometry of these data sets differs for the geometry of the last data sets used to bu...
static int findRegion(vtkKdNode *node, float x, float y, float z)
void DeleteCellLists()
Free the memory used by the cell lists.
vtkIdType * LastNumPoints
Definition: vtkKdTree.h:958
void _generateRepresentationWholeSpace(vtkKdNode *kd, vtkPoints *pts, vtkCellArray *polys, int level)
void ClearLastBuildCache()
vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double &dist2)
Given a position x and a radius r, return the id of the point closest to the point in that radius.
void OmitYPartitioning()
Omit partitions along the Y axis, yielding shafts in the Y direction.
void GetBounds(double *bounds)
Get the spatial bounds of the entire k-d tree space.
int NumberOfLocatorPoints
Definition: vtkKdTree.h:941
static void SetDataBoundsToSpatialBounds(vtkKdNode *kd)
static void CopyChildNodes(vtkKdNode *to, vtkKdNode *from)
static void _Select(int dim, float *X, int *ids, int L, int R, int K)
double * LastBounds
Definition: vtkKdTree.h:957
int GetNumberOfDataSets()
Get the number of data sets included in spatial partitioning.
static int ComputeLevel(vtkKdNode *kd)
int GetRegionContainingCell(int set, vtkIdType cellID)
Get the id of the region containing the cell centroid.
static int findRegion(vtkKdNode *node, double x, double y, double z)
void UpdateProgress(double amount)
Modelled on vtkAlgorithm::UpdateProgress().
void FindPointsWithinRadius(double R, const double x[3], vtkIdList *result)
Find all points within a specified radius R of position x.
int NumberOfRegionsOrMore
Definition: vtkKdTree.h:918
void SetNewBounds(double *bounds)
There are certain applications where you want the bounds of the k-d tree space to be at least as larg...
int ProcessUserDefinedCuts(double *bounds)
static void AddNewRegions(vtkKdNode *kd, float *c1, int midpt, int dim, double coord)
static int __ViewOrderRegionsInDirection(vtkKdNode *node, vtkIntArray *list, vtkIntArray *IdsOfInterest, const double dir[3], int nextId)
static int FoundId(vtkIntArray *idArray, int id)
double ProgressScale
Definition: vtkKdTree.h:802
void OmitZPartitioning()
Omit partitions along the Z axis, yielding shafts in the Z direction.
void AddAllPointsInRegion(vtkKdNode *node, vtkIdTypeArray *ids)
void GenerateRepresentation(int *regionList, int len, vtkPolyData *pd)
Generate a polygonal representation of a list of regions.
int * LocatorIds
Definition: vtkKdTree.h:943
int ViewOrderRegionsInDirection(vtkIntArray *regionIds, const double directionOfProjection[3], vtkIntArray *orderedList)
Given a direction of projection and a list of k-d tree region IDs, this method, creates a list of the...
void FindPointsWithinRadius(vtkKdNode *node, double R2, const double x[3], vtkIdList *ids)
double ProgressOffset
Definition: vtkKdTree.h:811
void ComputeCellCenter(vtkDataSet *set, int cellId, double *center)
void BuildLocatorFromPoints(vtkPoints **ptArray, int numPtArrays)
This is a special purpose locator that builds a k-d tree to find duplicate and near-by points.
void operator=(const vtkKdTree &)=delete
void BuildLocator() override
Create the k-d tree decomposition of the cells of the data set or data sets.
int _ViewOrderRegionsFromPosition(vtkIntArray *IdsOfInterest, const double pos[3], vtkIntArray *orderedList)
vtkIdList * GetBoundaryCellList(int regionID)
The cell list obtained with GetCellList is the list of all cells such that their centroid is containe...
void SetActualLevel()
Definition: vtkKdTree.h:737
void _generateRepresentationDataBounds(vtkKdNode *kd, vtkPoints *pts, vtkCellArray *polys, int level)
void BuildLocatorFromPoints(vtkPointSet *pointset)
This is a special purpose locator that builds a k-d tree to find duplicate and near-by points.
void PrintVerboseTree()
Print out nodes of kd tree.
vtkIdType FindClosestPointInRegion(int regionId, double *x, double &dist2)
Find the Id of the point in the given region which is closest to the given point.
vtkIdType FindClosestPoint(double *x, double &dist2)
Find the Id of the point that was previously supplied to BuildLocatorFromPoints() which is closest to...
double Progress
Definition: vtkKdTree.h:962
static int MidValue(int dim, float *c1, int nvals, double &coord)
int UserDefinedCuts
Definition: vtkKdTree.h:695
virtual int SelectCutDirection(vtkKdNode *kd)
~vtkKdTree() override
vtkIdType FindClosestPoint(double x, double y, double z, double &dist2)
Find the Id of the point that was previously supplied to BuildLocatorFromPoints() which is closest to...
vtkDataSet * GetDataSet() override
Return the 0'th data set.
Definition: vtkKdTree.h:290
static int __ViewOrderRegionsFromPosition(vtkKdNode *node, vtkIntArray *list, vtkIntArray *IdsOfInterest, const double pos[3], int nextId)
int MinCells
Definition: vtkKdTree.h:932
virtual void AddDataSet(vtkDataSet *set)
This class can compute a spatial decomposition based on the cells in a list of one or more input data...
int ViewOrderRegionsFromPosition(vtkIntArray *regionIds, const double directionOfProjection[3], vtkIntArray *orderedList)
Given a camera position and a list of k-d tree region IDs, this method, creates a list of the k-d tre...
double FudgeFactor
Definition: vtkKdTree.h:936
int * AllGetRegionContainingCell()
Get a list (in order by data set by cell id) of the region IDs of the region containing the centroid ...
void ComputeCellCenter(vtkDataSet *set, int cellId, float *center)
Get or compute the center of one cell.
void CreateCellLists(vtkDataSet *set, int *regionReqList, int reqListSize)
virtual void PrintTiming(ostream &os, vtkIndent indent)
Print timing of k-d tree build.
void FindPointsInArea(vtkKdNode *node, double *area, vtkIdTypeArray *ids)
vtkDataSet * GetDataSet(int n)
Get the nth defined data set in the spatial partitioning.
void UpdateBuildTime()
Save enough state so NewGeometry() can work, and update the BuildTime time stamp.
virtual int NewGeometry()
Return 1 if the geometry of the input data sets has changed since the last time the k-d tree was buil...
int FindClosestPointInSphere(double x, double y, double z, double radius, int skipRegion, double &dist2)
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetCalculator(vtkKdNode *kd)
vtkIdList * GetCellList(int regionID)
Get the cell list for a region.
static vtkKdTree * New()
vtkKdTree(const vtkKdTree &)=delete
int GetRegionContainingCell(vtkDataSet *set, vtkIdType cellID)
Get the id of the region containing the cell centroid.
int ViewOrderAllRegionsFromPosition(const double directionOfProjection[3], vtkIntArray *orderedList)
Given a camera position (typically obtained with vtkCamera::GetPosition()), this method,...
vtkTimerLog * TimerLog
Definition: vtkKdTree.h:731
void GetRegionsAtLevel(int level, vtkKdNode **nodes)
Get back a list of the nodes at a specified level, nodes must be preallocated to hold 2^^(level) node...
unsigned long * LastDataSetObserverTags
Definition: vtkKdTree.h:954
void OmitXPartitioning()
Omit partitions along the X axis, yielding shafts in the X direction.
static void GetLeafNodeIds(vtkKdNode *node, vtkIntArray *ids)
Adds to the vtkIntArray the list of region IDs of all leaf nodes in the given node.
int * CellRegionList
Definition: vtkKdTree.h:930
int ViewOrderAllRegionsInDirection(const double directionOfProjection[3], vtkIntArray *orderedList)
Given a direction of projection (typically obtained with vtkCamera::GetDirectionOfProjection()),...
static int __ConvexSubRegions(int *ids, int len, vtkKdNode *tree, vtkKdNode **nodes)
int _FindClosestPointInRegion(int regionId, double x, double y, double z, double &dist2)
void DoMedianFind(vtkKdNode *kd, float *c1, int *ids, int d1, int d2, int d3)
void PrintRegion(int id)
Print out leaf node data for given id.
vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double &dist2)
Find the Id of the point in the given region which is closest to the given point.
int DivideTest(int numberOfPoints, int level)
Prior to dividing a region at level "level", of size "numberOfPoints", apply the tests implied by Min...
float * ComputeCellCenters(vtkDataSet *set)
virtual void RemoveDataSet(int index)
Remove the given data set.
void OmitXYPartitioning()
Omit partitions along the X and Y axes, yielding slabs along Z.
void BuildLocatorFromPoints(vtkPoints *ptArray)
This is a special purpose locator that builds a k-d tree to find duplicate and near-by points.
void GenerateRepresentationWholeSpace(int level, vtkPolyData *pd)
int SearchRegionForDuplicate(float *point, int *pointsSoFar, int len, float tolerance2)
static void DeleteAllDescendants(vtkKdNode *nd)
void AddPolys(vtkKdNode *kd, vtkPoints *pts, vtkCellArray *polys)
vtkIdType FindPoint(double *x)
Find the Id of the point that was previously supplied to BuildLocatorFromPoints().
vtkIdType GetCellLists(vtkIntArray *regions, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
For a list of regions, get two cell lists.
vtkIdType * LastNumCells
Definition: vtkKdTree.h:959
void GetRegionBounds(int regionID, double bounds[6])
Get the spatial bounds of k-d tree region.
int GetRegionContainingPoint(double x, double y, double z)
Get the id of the region containing the specified location.
int GetDataSetsNumberOfCells(int set1, int set2)
Returns the total number of cells in data set 1 through data set 2.
void SetCuts(vtkBSPCuts *cuts)
Normally the k-d tree is computed from the dataset(s) provided in SetDataSet.
void FindPointsInArea(double *area, vtkIdTypeArray *ids, bool clearArray=true)
Fill ids with points found in area.
void FindClosestNPoints(int N, const double x[3], vtkIdList *result)
Find the closest N points to a position.
static void ZeroNumberOfPoints(vtkKdNode *kd)
vtkKdNode * Top
Definition: vtkKdTree.h:728
int GetDataSetIndex(vtkDataSet *set)
Return the index of the given data set.
float * LocatorPoints
Definition: vtkKdTree.h:942
abstract base class for objects that accelerate spatial searches
Definition: vtkLocator.h:89
concrete class for storing a set of points
Definition: vtkPointSet.h:106
represent and manipulate 3D points
Definition: vtkPoints.h:143
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:195
Timer support and logging.
Definition: vtkTimerLog.h:199
@ point
Definition: vtkX3D.h:242
@ level
Definition: vtkX3D.h:401
@ dir
Definition: vtkX3D.h:330
@ center
Definition: vtkX3D.h:236
@ spacing
Definition: vtkX3D.h:487
@ radius
Definition: vtkX3D.h:258
@ index
Definition: vtkX3D.h:252
vtkIdList ** boundaryCells
Definition: vtkKdTree.h:848
vtkIdList * emptyList
Definition: vtkKdTree.h:849
vtkIdList ** cells
Definition: vtkKdTree.h:847
vtkDataSet * dataSet
Definition: vtkKdTree.h:844
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332