You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

137 lines
4.1 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkKdTreeSelector.h
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
All rights reserved.
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notice for more information.
=========================================================================*/
/*----------------------------------------------------------------------------
Copyright (c) Sandia Corporation
See Copyright.txt or http://www.paraview.org/HTML/Copyright.html for details.
----------------------------------------------------------------------------*/
/**
* @class vtkKdTreeSelector
* @brief Selects point ids using a kd-tree.
*
*
* If SetKdTree is used, the filter ignores the input and selects based on that
* kd-tree. If SetKdTree is not used, the filter builds a kd-tree using the
* input point set and uses that tree for selection. The output is a
* vtkSelection containing the ids found in the kd-tree using the specified
* bounds.
*/
#ifndef vtkKdTreeSelector_h
#define vtkKdTreeSelector_h
#include "vtkFiltersSelectionModule.h" // For export macro
#include "vtkSelectionAlgorithm.h"
class vtkKdTree;
class VTKFILTERSSELECTION_EXPORT vtkKdTreeSelector : public vtkSelectionAlgorithm
{
public:
static vtkKdTreeSelector* New();
vtkTypeMacro(vtkKdTreeSelector, vtkSelectionAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@{
/**
* The kd-tree to use to find selected ids.
* The kd-tree must be initialized with the desired set of points.
* When this is set, the optional input is ignored.
*/
void SetKdTree(vtkKdTree* tree);
vtkGetObjectMacro(KdTree, vtkKdTree);
//@}
//@{
/**
* The bounds of the form (xmin,xmax,ymin,ymax,zmin,zmax).
* To perform a search in 2D, use the bounds
* (xmin,xmax,ymin,ymax,VTK_DOUBLE_MIN,VTK_DOUBLE_MAX).
*/
vtkSetVector6Macro(SelectionBounds, double);
vtkGetVector6Macro(SelectionBounds, double);
//@}
//@{
/**
* The field name to use when generating the selection.
* If set, creates a VALUES selection.
* If not set (or is set to nullptr), creates a INDICES selection.
* By default this is not set.
*/
vtkSetStringMacro(SelectionFieldName);
vtkGetStringMacro(SelectionFieldName);
//@}
//@{
/**
* The field attribute to use when generating the selection.
* If set, creates a PEDIGREEIDS or GLOBALIDS selection.
* If not set (or is set to -1), creates a INDICES selection.
* By default this is not set.
* NOTE: This should be set a constant in vtkDataSetAttributes,
* not vtkSelection.
*/
vtkSetMacro(SelectionAttribute, int);
vtkGetMacro(SelectionAttribute, int);
//@}
//@{
/**
* Whether to only allow up to one value in the result.
* The item selected is closest to the center of the bounds,
* if there are any points within the selection threshold.
* Default is off.
*/
vtkSetMacro(SingleSelection, bool);
vtkGetMacro(SingleSelection, bool);
vtkBooleanMacro(SingleSelection, bool);
//@}
//@{
/**
* The threshold for the single selection.
* A single point is added to the selection if it is within
* this threshold from the bounds center.
* Default is 1.
*/
vtkSetMacro(SingleSelectionThreshold, double);
vtkGetMacro(SingleSelectionThreshold, double);
//@}
vtkMTimeType GetMTime() override;
protected:
vtkKdTreeSelector();
~vtkKdTreeSelector() override;
vtkKdTree* KdTree;
double SelectionBounds[6];
char* SelectionFieldName;
bool BuildKdTreeFromInput;
bool SingleSelection;
double SingleSelectionThreshold;
int SelectionAttribute;
int FillInputPortInformation(int port, vtkInformation* info) override;
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
private:
vtkKdTreeSelector(const vtkKdTreeSelector&) = delete;
void operator=(const vtkKdTreeSelector&) = delete;
};
#endif