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.

123 lines
4.2 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkExtractHierarchicalBins.h
Copyright (c) Kitware, Inc.
All rights reserved.
See LICENSE file 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.
=========================================================================*/
/**
* @class vtkExtractHierarchicalBins
* @brief manipulate the output of
* vtkHierarchicalBinningFilter
*
*
* vtkExtractHierarchicalBins enables users to extract data from the output
* of vtkHierarchicalBinningFilter. Points at a particular level, or at a
* level and bin number, can be filtered to the output. To perform these
* operations, the output must contain points sorted into bins (the
* vtkPoints), with offsets pointing to the beginning of each bin (a
* vtkFieldData array named "BinOffsets").
*
*
* @warning
* This class has been threaded with vtkSMPTools. Using TBB or other
* non-sequential type (set in the CMake variable
* VTK_SMP_IMPLEMENTATION_TYPE) may improve performance significantly.
*
* @sa
* vtkFiltersPointsFilter vtkRadiusOutlierRemoval vtkStatisticalOutlierRemoval
* vtkThresholdPoints vtkImplicitFunction vtkExtractGeometry
* vtkFitImplicitFunction
*/
#ifndef vtkExtractHierarchicalBins_h
#define vtkExtractHierarchicalBins_h
#include "vtkFiltersPointsModule.h" // For export macro
#include "vtkPointCloudFilter.h"
class vtkHierarchicalBinningFilter;
class vtkPointSet;
class VTKFILTERSPOINTS_EXPORT vtkExtractHierarchicalBins : public vtkPointCloudFilter
{
public:
//@{
/**
* Standard methods for instantiating, obtaining type information, and
* printing information.
*/
static vtkExtractHierarchicalBins* New();
vtkTypeMacro(vtkExtractHierarchicalBins, vtkPointCloudFilter);
void PrintSelf(ostream& os, vtkIndent indent) override;
//@}
//@{
/**
* Specify the level to extract. If non-negative, with a negative bin
* number, then all points at this level are extracted and sent to the
* output. If negative, then the points from the specified bin are sent to
* the output. If both the level and bin number are negative values, then
* the input is sent to the output. By default the 0th level is
* extracted. Note that requesting a level greater than the associated
* vtkHierarchicalBinningFilter will clamp the level to the maximum
* possible level of the binning filter.
*/
vtkSetMacro(Level, int);
vtkGetMacro(Level, int);
//@}
//@{
/**
* Specify the bin number to extract. If a non-negative value, then the
* points from the bin number specified are extracted. If negative, then
* entire levels of points are extacted (assuming the Level is
* non-negative). Note that the bin tree is flattened, a particular bin
* number may refer to a bin on any level. Note that requesting a bin
* greater than the associated vtkHierarchicalBinningFilter will clamp the
* bin to the maximum possible bin of the binning filter.
*/
vtkSetMacro(Bin, int);
vtkGetMacro(Bin, int);
//@}
//@{
/**
* Specify the vtkHierarchicalBinningFilter to query for relevant
* information. Make sure that this filter has executed prior to the execution of
* this filter. (This is generally a safe bet if connected in a pipeline.)
*/
virtual void SetBinningFilter(vtkHierarchicalBinningFilter*);
vtkGetObjectMacro(BinningFilter, vtkHierarchicalBinningFilter);
//@}
protected:
vtkExtractHierarchicalBins();
~vtkExtractHierarchicalBins() override;
// Users can extract points from a particular level or bin.
int Level;
int Bin;
vtkHierarchicalBinningFilter* BinningFilter;
// for the binning filter
void ReportReferences(vtkGarbageCollector*) override;
// All derived classes must implement this method. Note that a side effect of
// the class is to populate the PointMap. Zero is returned if there is a failure.
int FilterPoints(vtkPointSet* input) override;
private:
vtkExtractHierarchicalBins(const vtkExtractHierarchicalBins&) = delete;
void operator=(const vtkExtractHierarchicalBins&) = delete;
};
#endif