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
71#ifndef vtkKdTree_h
72#define vtkKdTree_h
73
74#include "vtkCommonDataModelModule.h" // For export macro
75#include "vtkLocator.h"
76
77class vtkTimerLog;
78class vtkIdList;
79class vtkIdTypeArray;
80class vtkIntArray;
81class vtkPointSet;
82class vtkPoints;
83class vtkCellArray;
84class vtkCell;
85class vtkKdNode;
86class vtkBSPCuts;
89
90class VTKCOMMONDATAMODEL_EXPORT vtkKdTree : public vtkLocator
91{
92public:
93 vtkTypeMacro(vtkKdTree, vtkLocator);
94 void PrintSelf(ostream& os, vtkIndent indent) override;
95
96 static vtkKdTree* New();
97
99
102 vtkBooleanMacro(Timing, vtkTypeBool);
103 vtkSetMacro(Timing, vtkTypeBool);
104 vtkGetMacro(Timing, vtkTypeBool);
106
108
111 vtkSetMacro(MinCells, int);
112 vtkGetMacro(MinCells, int);
114
122 vtkGetMacro(NumberOfRegionsOrLess, int);
123 vtkSetMacro(NumberOfRegionsOrLess, int);
124
132 vtkGetMacro(NumberOfRegionsOrMore, int);
133 vtkSetMacro(NumberOfRegionsOrMore, int);
134
142 vtkGetMacro(FudgeFactor, double);
143 vtkSetMacro(FudgeFactor, double);
144
150 vtkGetObjectMacro(Cuts, vtkBSPCuts);
151
158 void SetCuts(vtkBSPCuts* cuts);
159
164
169
174
179
184
189
194
209 void SetDataSet(vtkDataSet* set) override;
210
215 virtual void AddDataSet(vtkDataSet* set);
216
218
221 virtual void RemoveDataSet(int index);
222 virtual void RemoveDataSet(vtkDataSet* set);
223 virtual void RemoveAllDataSets();
225
230
241
246 vtkDataSet* GetDataSet() override { return this->GetDataSet(0); }
247
249
252 vtkGetObjectMacro(DataSets, vtkDataSetCollection);
254
260
265 void GetBounds(double* bounds);
266
275 void SetNewBounds(double* bounds);
276
278
281 vtkGetMacro(NumberOfRegions, int);
283
287 void GetRegionBounds(int regionID, double bounds[6]);
288
292 void GetRegionDataBounds(int regionID, double bounds[6]);
293
295
298 void PrintTree();
301
305 void PrintRegion(int id);
306
319 void CreateCellLists(int dataSetIndex, int* regionReqList, int reqListSize);
320 void CreateCellLists(vtkDataSet* set, int* regionReqList, int reqListSize);
321 void CreateCellLists(int* regionReqList, int listSize);
323
325
332 vtkSetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
333 vtkGetMacro(IncludeRegionBoundaryCells, vtkTypeBool);
334 vtkBooleanMacro(IncludeRegionBoundaryCells, vtkTypeBool);
336
341
346 vtkIdList* GetCellList(int regionID);
347
359
361
382 vtkIntArray* regions, int set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
384 vtkIntArray* regions, vtkDataSet* set, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
386 vtkIntArray* regions, vtkIdList* inRegionCells, vtkIdList* onBoundaryCells);
388
390
397 int GetRegionContainingCell(int set, vtkIdType cellID);
400
410
414 int GetRegionContainingPoint(double x, double y, double z);
415
421 void BuildLocator() override;
422
426 void ForceBuildLocator() override;
427
442 int MinimalNumberOfConvexSubRegions(vtkIntArray* regionIdList, double** convexRegionBounds);
443
452 const double directionOfProjection[3], vtkIntArray* orderedList);
453
462 vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
463
472 const double directionOfProjection[3], vtkIntArray* orderedList);
473
482 vtkIntArray* regionIds, const double directionOfProjection[3], vtkIntArray* orderedList);
483
485
500 void BuildLocatorFromPoints(vtkPoints** ptArray, int numPtArrays);
502
518
520
526 vtkIdType FindPoint(double x, double y, double z);
528
530
535 vtkIdType FindClosestPoint(double* x, double& dist2);
536 vtkIdType FindClosestPoint(double x, double y, double z, double& dist2);
538
544 vtkIdType FindClosestPointWithinRadius(double radius, const double x[3], double& dist2);
545
547
552 vtkIdType FindClosestPointInRegion(int regionId, double* x, double& dist2);
553 vtkIdType FindClosestPointInRegion(int regionId, double x, double y, double z, double& dist2);
555
562 void FindPointsWithinRadius(double R, const double x[3], vtkIdList* result);
563
572 void FindClosestNPoints(int N, const double x[3], vtkIdList* result);
573
579
584 void FreeSearchStructure() override;
585
591 void GenerateRepresentation(int level, vtkPolyData* pd) override;
592
597 void GenerateRepresentation(int* regionList, int len, vtkPolyData* pd);
598
600
606 vtkBooleanMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
607 vtkSetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
608 vtkGetMacro(GenerateRepresentationUsingDataBounds, vtkTypeBool);
610
614 virtual void PrintTiming(ostream& os, vtkIndent indent);
615
620 virtual int NewGeometry();
621
627 virtual int NewGeometry(vtkDataSet** sets, int numDataSets);
628
634 virtual void InvalidateGeometry();
635
642
649 void FindPointsInArea(double* area, vtkIdTypeArray* ids, bool clearArray = true);
650
651protected:
653 ~vtkKdTree() override;
654
655 void BuildLocatorInternal() override;
656
659
661
662 int ProcessUserDefinedCuts(double* bounds);
663
664 void SetCuts(vtkBSPCuts* cuts, int userDefined);
665
672
680 int DivideTest(int numberOfPoints, int level);
681
682 enum
683 {
684 XDIM = 0, // don't change these values
685 YDIM = 1,
686 ZDIM = 2
687 };
688
690
692 vtkKdNode** RegionList; // indexed by region ID
693
695
697
700 void SetActualLevel() { this->Level = vtkKdTree::ComputeLevel(this->Top); }
701
707 void GetRegionsAtLevel(int level, vtkKdNode** nodes);
708
714 static void GetLeafNodeIds(vtkKdNode* node, vtkIntArray* ids);
715
721
727 int GetDataSetsNumberOfCells(int set1, int set2);
728
735 void ComputeCellCenter(vtkDataSet* set, int cellId, float* center);
736 void ComputeCellCenter(vtkDataSet* set, int cellId, double* center);
737
748 float* ComputeCellCenters(int set);
750
752
758 void UpdateProgress(double amount);
759
761
764 vtkSetClampMacro(Progress, double, 0.0, 1.0);
765 vtkGetMacro(Progress, double);
767
768protected:
769 // So that each suboperation can report progress
770 // in [0,1], yet we will be able to report a global
771 // progress. Sub-operations must use UpdateSubOperationProgress()
772 // for this to work.
775
776 // Update progress for a sub-operation. \c amount goes from 0.0 to 1.0.
777 // Actual progress is given by
778 // (this->ProgressOffset + this->ProgressScale* amount).
779 void UpdateSubOperationProgress(double amount);
780
781 static void SetNewBounds_(vtkKdNode* kd, double* b, int* fixDim);
782 static void CopyChildNodes(vtkKdNode* to, vtkKdNode* from);
783 static void CopyKdNode(vtkKdNode* to, vtkKdNode* from);
786
787 // Recursive helper for public FindPointsWithinRadius
788 void FindPointsWithinRadius(vtkKdNode* node, double R2, const double x[3], vtkIdList* ids);
789
790 // Recursive helper for public FindPointsWithinRadius
792
793 // Recursive helper for public FindPointsInArea
794 void FindPointsInArea(vtkKdNode* node, double* area, vtkIdTypeArray* ids);
795
796 // Recursive helper for public FindPointsInArea
798
799 int DivideRegion(vtkKdNode* kd, float* c1, int* ids, int nlevels);
800
801 void DoMedianFind(vtkKdNode* kd, float* c1, int* ids, int d1, int d2, int d3);
802
804
806 {
807 vtkDataSet* dataSet; // cell lists for which data set
808 int* regionIds; // nullptr if listing all regions
813 };
814
816 vtkIdList* GetList(int regionId, vtkIdList** which);
817
818 void ComputeCellCenter(vtkCell* cell, double* center, double* weights);
819
822 vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
823
826 vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys, int level);
827
828 void AddPolys(vtkKdNode* kd, vtkPoints* pts, vtkCellArray* polys);
829
830 void printTree_(int verbose);
831
833 int regionId, float* point, int** pointsSoFar, int* len, float tolerance, float tolerance2);
834
835 int SearchRegionForDuplicate(float* point, int* pointsSoFar, int len, float tolerance2);
836
837 int FindClosestPointInRegion_(int regionId, double x, double y, double z, double& dist2);
838
840 double x, double y, double z, double radius, int skipRegion, double& dist2);
841
843 vtkIntArray* IdsOfInterest, const double dop[3], vtkIntArray* orderedList);
844
846 vtkIntArray* IdsOfInterest, const double dir[3], int nextId);
847
849 vtkIntArray* IdsOfInterest, const double pos[3], vtkIntArray* orderedList);
850
852 vtkIntArray* IdsOfInterest, const double pos[3], int nextId);
853
854 static int ConvexSubRegions_(int* ids, int len, vtkKdNode* tree, vtkKdNode** nodes);
855 static int FoundId(vtkIntArray* idArray, int id);
856
857 void SetInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
858 int CheckInputDataInfo(int i, int dims[3], double origin[3], double spacing[3]);
860
861 static void printTree_P(vtkKdNode* kd, int depth, int verbose);
862
863 static int MidValue(int dim, float* c1, int nvals, double& coord);
864
865 static int Select(int dim, float* c1, int* ids, int nvals, double& coord);
866 static float FindMaxLeftHalf(int dim, float* c1, int K);
867 static void Select_(int dim, float* X, int* ids, int L, int R, int K);
868
869 static int ComputeLevel(vtkKdNode* kd);
870 static int SelfOrder(int id, vtkKdNode* kd);
871 static int findRegion(vtkKdNode* node, float x, float y, float z);
872 static int findRegion(vtkKdNode* node, double x, double y, double z);
873
874 static vtkKdNode** GetRegionsAtLevel_(int level, vtkKdNode** nodes, vtkKdNode* kd);
875
876 static void AddNewRegions(vtkKdNode* kd, float* c1, int midpt, int dim, double coord);
877
879
882
884 double CellBoundsCache[6]; // to optimize IntersectsCell()
885
887
888 struct cellList_ CellList;
889
890 // Region Ids, by data set by cell id - this list is large (one
891 // int per cell) but accelerates creation of cell lists
892
894
896 int NumberOfRegions; // number of leaf nodes
897
899 double FudgeFactor; // a very small distance, relative to the dataset's size
900
901 // These instance variables are used by the special locator created
902 // to find duplicate points. (BuildLocatorFromPoints)
903
908
909 float MaxWidth;
910
911 // These Last* values are here to save state so we can
912 // determine later if k-d tree must be rebuilt.
913
920 double* LastBounds;
923
925 double Progress;
926
927 vtkKdTree(const vtkKdTree&) = delete;
928 void operator=(const vtkKdTree&) = delete;
929};
930#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
abstract class to specify cell behavior
Definition vtkCell.h:70
maintain an unordered list of dataset objects
abstract class to specify dataset behavior
Definition vtkDataSet.h:72
list of point or cell ids
Definition vtkIdList.h:43
dynamic, self-adjusting array of vtkIdType
a simple class to control print indentation
Definition vtkIndent.h:49
dynamic, self-adjusting array of int
Definition vtkIntArray.h:55
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:91
void SelfRegister(vtkKdNode *kd)
vtkIdList * GetBoundaryCellList(int regionID)
The cell list obtained with GetCellList is the list of all cells such that their centroid is containe...
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.
int * LastDataSetType
Definition vtkKdTree.h:918
vtkTypeBool Timing
Definition vtkKdTree.h:898
vtkIdTypeArray * GetPointsInRegion(int regionId)
Get a list of the original IDs of all points in a region.
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...
vtkDataSetCollection * DataSets
Definition vtkKdTree.h:751
void CreateCellLists(int *regionReqList, int listSize)
int ValidDirections
Definition vtkKdTree.h:689
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:896
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:883
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:915
float MaxWidth
Definition vtkKdTree.h:909
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)
vtkDataSet * GetDataSet(int n)
Get the nth defined data set in the spatial partitioning.
float * ComputeCellCenters(int set)
vtkIdTypeArray * BuildMapForDuplicatePoints(float tolerance)
This call returns a mapping from the original point IDs supplied to BuildLocatorFromPoints to a subse...
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:880
static int Select(int dim, float *c1, int *ids, int nvals, double &coord)
void UpdateSubOperationProgress(double amount)
void CreateCellLists()
vtkDataSet ** LastInputDataSets
Definition vtkKdTree.h:916
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:919
static vtkKdNode * CopyTree(vtkKdNode *kd)
Create a copy of the binary tree representation of the k-d tree spatial partitioning provided.
vtkBSPCuts * Cuts
Definition vtkKdTree.h:924
vtkBSPIntersections * BSPCalculator
Definition vtkKdTree.h:657
void SetCuts(vtkBSPCuts *cuts, int userDefined)
vtkKdNode ** RegionList
Definition vtkKdTree.h:692
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:914
static float FindMaxLeftHalf(int dim, float *c1, int K)
int * LocatorRegionLocation
Definition vtkKdTree.h:907
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...
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:921
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:904
static void SetDataBoundsToSpatialBounds(vtkKdNode *kd)
static void CopyChildNodes(vtkKdNode *to, vtkKdNode *from)
float * ComputeCellCenters(vtkDataSet *set)
double * LastBounds
Definition vtkKdTree.h:920
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 vtkKdTree * New()
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.
vtkDataSet * GetDataSet() override
Return the 0'th data set.
Definition vtkKdTree.h:246
int NumberOfRegionsOrMore
Definition vtkKdTree.h:881
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:773
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:906
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:774
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)
static vtkKdNode ** GetRegionsAtLevel_(int level, vtkKdNode **nodes, vtkKdNode *kd)
void operator=(const vtkKdTree &)=delete
void BuildLocator() override
Create the k-d tree decomposition of the cells of the data set or data sets.
void SetActualLevel()
Definition vtkKdTree.h:700
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:925
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:658
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...
vtkTypeBool GenerateRepresentationUsingDataBounds
Definition vtkKdTree.h:886
int MinCells
Definition vtkKdTree.h:895
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:899
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)
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)
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:694
vtkIdList * GetCellList(int regionID)
Get the cell list for a region.
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:917
void OmitXPartitioning()
Omit partitions along the X axis, yielding shafts in the X direction.
int * AllGetRegionContainingCell()
Get a list (in order by data set by cell id) of the region IDs of the region containing the centroid ...
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:893
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...
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)
vtkIdList * GetList(int regionId, vtkIdList **which)
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:922
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)
float * ComputeCellCenters()
Compute and return a pointer to a list of all cell centers, in order by data set by cell Id.
vtkKdNode * Top
Definition vtkKdTree.h:691
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:905
abstract base class for objects that accelerate spatial searches
Definition vtkLocator.h:79
concrete class for storing a set of points
Definition vtkPointSet.h:79
represent and manipulate 3D points
Definition vtkPoints.h:49
concrete dataset represents vertices, lines, polygons, and triangle strips
Timer support and logging.
vtkIdList ** boundaryCells
Definition vtkKdTree.h:811
vtkIdList ** cells
Definition vtkKdTree.h:810
vtkIdList * emptyList
Definition vtkKdTree.h:812
vtkDataSet * dataSet
Definition vtkKdTree.h:807
int vtkTypeBool
Definition vtkABI.h:69
int vtkIdType
Definition vtkType.h:332