VTK  9.2.6
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 
121 #ifndef vtkKdTree_h
122 #define vtkKdTree_h
123 
124 #include "vtkCommonDataModelModule.h" // For export macro
125 #include "vtkLocator.h"
126 
127 class vtkTimerLog;
128 class vtkIdList;
129 class vtkIdTypeArray;
130 class vtkIntArray;
131 class vtkPointSet;
132 class vtkPoints;
133 class vtkCellArray;
134 class vtkCell;
135 class vtkKdNode;
136 class vtkBSPCuts;
137 class vtkBSPIntersections;
139 
140 class VTKCOMMONDATAMODEL_EXPORT vtkKdTree : public vtkLocator
141 {
142 public:
143  vtkTypeMacro(vtkKdTree, vtkLocator);
144  void PrintSelf(ostream& os, vtkIndent indent) override;
145 
146  static vtkKdTree* New();
147 
149 
152  vtkBooleanMacro(Timing, vtkTypeBool);
153  vtkSetMacro(Timing, vtkTypeBool);
154  vtkGetMacro(Timing, vtkTypeBool);
156 
158 
161  vtkSetMacro(MinCells, int);
162  vtkGetMacro(MinCells, int);
164 
172  vtkGetMacro(NumberOfRegionsOrLess, int);
173  vtkSetMacro(NumberOfRegionsOrLess, int);
174 
182  vtkGetMacro(NumberOfRegionsOrMore, int);
183  vtkSetMacro(NumberOfRegionsOrMore, int);
184 
192  vtkGetMacro(FudgeFactor, double);
193  vtkSetMacro(FudgeFactor, double);
194 
200  vtkGetObjectMacro(Cuts, vtkBSPCuts);
201 
208  void SetCuts(vtkBSPCuts* cuts);
209 
214 
219 
224 
229 
234 
239 
244 
259  void SetDataSet(vtkDataSet* set) override;
260 
265  virtual void AddDataSet(vtkDataSet* set);
266 
268 
271  virtual void RemoveDataSet(int index);
272  virtual void RemoveDataSet(vtkDataSet* set);
273  virtual void RemoveAllDataSets();
275 
280 
291 
296  vtkDataSet* GetDataSet() override { return this->GetDataSet(0); }
297 
299 
302  vtkGetObjectMacro(DataSets, vtkDataSetCollection);
304 
310 
315  void GetBounds(double* bounds);
316 
325  void SetNewBounds(double* bounds);
326 
328 
331  vtkGetMacro(NumberOfRegions, int);
333 
337  void GetRegionBounds(int regionID, double bounds[6]);
338 
342  void GetRegionDataBounds(int regionID, double bounds[6]);
343 
345 
348  void PrintTree();
351 
355  void PrintRegion(int id);
356 
369  void CreateCellLists(int dataSetIndex, int* regionReqList, int reqListSize);
370  void CreateCellLists(vtkDataSet* set, int* regionReqList, int reqListSize);
371  void CreateCellLists(int* regionReqList, int listSize);
373 
375 
382  vtkSetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
383  vtkGetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
384  vtkBooleanMacro(IncludeRegionBoundaryCells, vtkTypeBool);
386 
391 
396  vtkIdList* GetCellList(int regionID);
397 
409 
411 
432  vtkIntArray* regions, int set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
434  vtkIntArray* regions, vtkDataSet* set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
436  vtkIntArray* regions, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
438 
440 
447  int GetRegionContainingCell(int set, vtkIdType cellID);
450 
460 
464  int GetRegionContainingPoint(double x, double y, double z);
465 
471  void BuildLocator() override;
472 
476  void ForceBuildLocator() override;
477 
492  int MinimalNumberOfConvexSubRegions(vtkIntArray* regionIdList, double** convexRegionBounds);
493 
502  const double directionOfProjection[3], vtkIntArray* orderedList);
503 
512  vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
513 
522  const double directionOfProjection[3], vtkIntArray* orderedList);
523 
532  vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
533 
535 
550  void BuildLocatorFromPoints(vtkPoints** ptArray, int numPtArrays);
552 
568 
570 
575  vtkIdType FindPoint(double* x);
576  vtkIdType FindPoint(double x, double y, double z);
578 
580 
585  vtkIdType FindClosestPoint(double* x, double& dist2);
586  vtkIdType FindClosestPoint(double x, double y, double z, double& dist2);
588 
594  vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2);
595 
597 
602  vtkIdType FindClosestPointInRegion(int regionId, double* x, double& dist2);
603  vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
605 
612  void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result);
613 
622  void FindClosestNPoints(int N, const double x[3], vtkIdList* result);
623 
629 
634  void FreeSearchStructure() override;
635 
641  void GenerateRepresentation(int level, vtkPolyData* pd) override;
642 
647  void GenerateRepresentation(int* regionList, int len, vtkPolyData* pd);
648 
650 
656  vtkBooleanMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
657  vtkSetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
658  vtkGetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
660 
664  virtual void PrintTiming(ostream& os, vtkIndent indent);
665 
670  virtual int NewGeometry();
671 
677  virtual int NewGeometry(vtkDataSet** sets, int numDataSets);
678 
684  virtual void InvalidateGeometry();
685 
692 
699  void FindPointsInArea(double* area, vtkIdTypeArray* ids, bool clearArray = true);
700 
701 protected:
703  ~vtkKdTree() override;
704 
705  void BuildLocatorInternal() override;
706 
709 
711 
712  int ProcessUserDefinedCuts(double* bounds);
713 
714  void SetCuts(vtkBSPCuts* cuts, int userDefined);
715 
722 
730  int DivideTest(int numberOfPoints, int level);
731 
732  enum
733  {
734  XDIM = 0, // don't change these values
735  YDIM = 1,
736  ZDIM = 2
737  };
738 
740 
742  vtkKdNode** RegionList; // indexed by region ID
743 
745 
746  static void DeleteAllDescendants(vtkKdNode* nd);
747 
749  virtual int SelectCutDirection(vtkKdNode* kd);
750  void SetActualLevel() { this->Level = vtkKdTree::ComputeLevel(this->Top); }
751 
757  void GetRegionsAtLevel(int level, vtkKdNode** nodes);
758 
764  static void GetLeafNodeIds(vtkKdNode* node, vtkIntArray* ids);
765 
771 
777  int GetDataSetsNumberOfCells(int set1, int set2);
778 
785  void ComputeCellCenter(vtkDataSet* set, int cellId, float* center);
786  void ComputeCellCenter(vtkDataSet* set, int cellId, double* center);
787 
798  float* ComputeCellCenters(int set);
800 
802 
808  void UpdateProgress(double amount);
809 
811 
814  vtkSetClampMacro(Progress, double, 0.0, 1.0);
815  vtkGetMacro(Progress, double);
817 
818 protected:
819  // So that each suboperation can report progress
820  // in [0,1], yet we will be able to report a global
821  // progress. Sub-operations must use UpdateSubOperationProgress()
822  // for this to work.
825 
826  // Update progress for a sub-operation. \c amount goes from 0.0 to 1.0.
827  // Actual progress is given by
828  // (this->ProgressOffset + this->ProgressScale* amount).
829  void UpdateSubOperationProgress(double amount);
830 
831  static void SetNewBounds_(vtkKdNode* kd, double* b, int* fixDim);
832  static void CopyChildNodes(vtkKdNode* to, vtkKdNode* from);
833  static void CopyKdNode(vtkKdNode* to, vtkKdNode* from);
835  static void ZeroNumberOfPoints(vtkKdNode* kd);
836 
837  // Recursive helper for public FindPointsWithinRadius
838  void FindPointsWithinRadius(vtkKdNode* node, double R2, const double x[3], vtkIdList* ids);
839 
840  // Recursive helper for public FindPointsWithinRadius
842 
843  // Recursive helper for public FindPointsInArea
844  void FindPointsInArea(vtkKdNode* node, double* area, vtkIdTypeArray* ids);
845 
846  // Recursive helper for public FindPointsInArea
848 
849  int DivideRegion(vtkKdNode* kd, float* c1, int* ids, int nlevels);
850 
851  void DoMedianFind(vtkKdNode* kd, float* c1, int* ids, int d1, int d2, int d3);
852 
854 
855  struct cellList_
856  {
857  vtkDataSet* dataSet; // cell lists for which data set
858  int* regionIds; // nullptr if listing all regions
859  int nRegions;
863  };
864 
866  vtkIdList* GetList(int regionId, vtkIdList** which);
867 
868  void ComputeCellCenter(vtkCell* cell, double* center, double* weights);
869 
872  vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
873 
876  vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
877 
878  void AddPolys(vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys);
879 
880  void printTree_(int verbose);
881 
883  int regionId, float* point, int** pointsSoFar, int* len, float tolerance, float tolerance2);
884 
885  int SearchRegionForDuplicate(float* point, int* pointsSoFar, int len, float tolerance2);
886 
887  int FindClosestPointInRegion_(int regionId, double x, double y, double z, double& dist2);
888 
890  double x, double y, double z, double radius, int skipRegion, double& dist2);
891 
893  vtkIntArray* IdsOfInterest, const double dop[3], vtkIntArray* orderedList);
894 
896  vtkIntArray* IdsOfInterest, const double dir[3], int nextId);
897 
899  vtkIntArray* IdsOfInterest, const double pos[3], vtkIntArray* orderedList);
900 
902  vtkIntArray* IdsOfInterest, const double pos[3], int nextId);
903 
904  static int ConvexSubRegions_(int* ids, int len, vtkKdNode* tree, vtkKdNode** nodes);
905  static int FoundId(vtkIntArray* idArray, int id);
906 
907  void SetInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
908  int CheckInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
910 
911  static void printTree_P(vtkKdNode* kd, int depth, int verbose);
912 
913  static int MidValue(int dim, float* c1, int nvals, double& coord);
914 
915  static int Select(int dim, float* c1, int* ids, int nvals, double& coord);
916  static float FindMaxLeftHalf(int dim, float* c1, int K);
917  static void Select_(int dim, float* X, int* ids, int L, int R, int K);
918 
919  static int ComputeLevel(vtkKdNode* kd);
920  static int SelfOrder(int id, vtkKdNode* kd);
921  static int findRegion(vtkKdNode* node, float x, float y, float z);
922  static int findRegion(vtkKdNode* node, double x, double y, double z);
923 
924  static vtkKdNode** GetRegionsAtLevel_(int level, vtkKdNode** nodes, vtkKdNode* kd);
925 
926  static void AddNewRegions(vtkKdNode* kd, float* c1, int midpt, int dim, double coord);
927 
928  void NewPartitioningRequest(int req);
929 
932 
934  double CellBoundsCache[6]; // to optimize IntersectsCell()
935 
936  vtkTypeBool GenerateRepresentationUsingDataBounds;
937 
938  struct cellList_ CellList;
939 
940  // Region Ids, by data set by cell id - this list is large (one
941  // int per cell) but accelerates creation of cell lists
942 
944 
945  int MinCells;
946  int NumberOfRegions; // number of leaf nodes
947 
949  double FudgeFactor; // a very small distance, relative to the dataset's size
950 
951  // These instance variables are used by the special locator created
952  // to find duplicate points. (BuildLocatorFromPoints)
953 
958 
959  float MaxWidth;
960 
961  // These Last* values are here to save state so we can
962  // determine later if k-d tree must be rebuilt.
963 
967  unsigned long* LastDataSetObserverTags;
970  double* LastBounds;
973 
975  double Progress;
976 
977  vtkKdTree(const vtkKdTree&) = delete;
978  void operator=(const vtkKdTree&) = delete;
979 };
980 #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:296
abstract class to specify cell behavior
Definition: vtkCell.h:150
maintain an unordered list of dataset objects
abstract class to specify dataset behavior
Definition: vtkDataSet.h:172
list of point or cell ids
Definition: vtkIdList.h:143
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition: vtkIndent.h:119
dynamic, self-adjusting array of int
Definition: vtkIntArray.h:155
This class represents a single spatial region in an 3D axis aligned binary spatial partitioning.
Definition: vtkKdNode.h:46
a Kd-tree spatial decomposition of a set of points
Definition: vtkKdTree.h:141
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.
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:968
vtkTypeBool Timing
Definition: vtkKdTree.h:948
int DivideRegion(vtkKdNode *kd, float *c1, int *ids, int nlevels)
static void CopyKdNode(vtkKdNode *to, vtkKdNode *from)
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:801
void CreateCellLists(int *regionReqList, int listSize)
int ValidDirections
Definition: vtkKdTree.h:739
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:946
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:933
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:965
float MaxWidth
Definition: vtkKdTree.h:959
vtkIdType GetCellLists(vtkIntArray *regions, int set, vtkIdList *inRegionCells, vtkIdList *onBoundaryCells)
For a list of regions, get two cell lists.
void BuildRegionList()
void OmitNoPartitioning()
Partition along all three axes - this is the default.
void BuildLocatorInternal() override
This function is not pure virtual to maintain backwards compatibility.
int GetNumberOfCells()
Returns the total number of cells in all the data sets.
void GenerateRepresentationDataBounds(int level, vtkPolyData *pd)
void printTree_(int verbose)
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:930
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:966
static int ViewOrderRegionsInDirection_P(vtkKdNode *node, vtkIntArray *list, vtkIntArray *IdsOfInterest, const double dir[3], int nextId)
void ComputeCellCenter(vtkCell *cell, double *center, double *weights)
double * LastInputDataInfo
Definition: vtkKdTree.h:969
vtkBSPCuts * Cuts
Definition: vtkKdTree.h:974
vtkBSPIntersections * BSPCalculator
Definition: vtkKdTree.h:707
void SetCuts(vtkBSPCuts *cuts, int userDefined)
vtkKdNode ** RegionList
Definition: vtkKdTree.h:742
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:964
static float FindMaxLeftHalf(int dim, float *c1, int K)
int * LocatorRegionLocation
Definition: vtkKdTree.h:957
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:971
void _generateRepresentationWholeSpace(vtkKdNode *kd, vtkPoints *pts, vtkCellArray *polys, int level)
void ClearLastBuildCache()
static int ViewOrderRegionsFromPosition_P(vtkKdNode *node, vtkIntArray *list, vtkIntArray *IdsOfInterest, const double pos[3], int nextId)
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:954
static void SetDataBoundsToSpatialBounds(vtkKdNode *kd)
static void CopyChildNodes(vtkKdNode *to, vtkKdNode *from)
double * LastBounds
Definition: vtkKdTree.h:970
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:931
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 FoundId(vtkIntArray *idArray, int id)
double ProgressScale
Definition: vtkKdTree.h:815
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:956
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:824
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.
static void Select_(int dim, float *X, int *ids, int L, int R, int K)
void operator=(const vtkKdTree &)=delete
void BuildLocator() override
Create the k-d tree decomposition of the cells of the data set or data sets.
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:750
static vtkKdNode ** GetRegionsAtLevel_(int level, vtkKdNode **nodes, vtkKdNode *kd)
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:975
int ViewOrderRegionsInDirection_(vtkIntArray *IdsOfInterest, const double dop[3], vtkIntArray *orderedList)
static int MidValue(int dim, float *c1, int nvals, double &coord)
int UserDefinedCuts
Definition: vtkKdTree.h:708
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:296
int MinCells
Definition: vtkKdTree.h:945
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:949
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)
static void printTree_P(vtkKdNode *kd, int depth, int verbose)
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,...
int ViewOrderRegionsFromPosition_(vtkIntArray *IdsOfInterest, const double pos[3], vtkIntArray *orderedList)
vtkTimerLog * TimerLog
Definition: vtkKdTree.h:744
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:967
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:943
int ViewOrderAllRegionsInDirection(const double directionOfProjection[3], vtkIntArray *orderedList)
Given a direction of projection (typically obtained with vtkCamera::GetDirectionOfProjection()),...
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.
static void SetNewBounds_(vtkKdNode *kd, double *b, int *fixDim)
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.
static int ConvexSubRegions_(int *ids, int len, vtkKdNode *tree, vtkKdNode **nodes)
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 ForceBuildLocator() override
Build the locator from the input dataset (even if UseExistingSearchStructure is on).
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:972
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:741
int FindClosestPointInRegion_(int regionId, double x, double y, double z, double &dist2)
int GetDataSetIndex(vtkDataSet *set)
Return the index of the given data set.
float * LocatorPoints
Definition: vtkKdTree.h:955
abstract base class for objects that accelerate spatial searches
Definition: vtkLocator.h:89
concrete class for storing a set of points
Definition: vtkPointSet.h:109
represent and manipulate 3D points
Definition: vtkPoints.h:149
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:200
Timer support and logging.
Definition: vtkTimerLog.h:205
@ 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:861
vtkIdList ** cells
Definition: vtkKdTree.h:860
vtkIdList * emptyList
Definition: vtkKdTree.h:862
vtkDataSet * dataSet
Definition: vtkKdTree.h:857
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332