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.
nmWTAI-Platform/3rd/VTK7.1/include/vtkMaskPoints.h

186 lines
6.6 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkMaskPoints.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.
=========================================================================*/
/**
* @class vtkMaskPoints
* @brief selectively filter points
*
* vtkMaskPoints is a filter that passes through points and point attributes
* from input dataset. (Other geometry is not passed through.) It is
* possible to mask every nth point, and to specify an initial offset
* to begin masking from.
* It is possible to also generate different random selections
* (jittered strides, real random samples, and spatially stratified
* random samples) from the input data.
* The filter can also generate vertices (topological
* primitives) as well as points. This is useful because vertices are
* rendered while points are not.
*/
#ifndef vtkMaskPoints_h
#define vtkMaskPoints_h
#include "vtkFiltersCoreModule.h" // For export macro
#include "vtkPolyDataAlgorithm.h"
class VTKFILTERSCORE_EXPORT vtkMaskPoints : public vtkPolyDataAlgorithm
{
public:
static vtkMaskPoints *New();
vtkTypeMacro(vtkMaskPoints,vtkPolyDataAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
//@{
/**
* Turn on every nth point (strided sampling), ignored by random modes.
*/
vtkSetClampMacro(OnRatio,int,1,VTK_INT_MAX);
vtkGetMacro(OnRatio,int);
//@}
//@{
/**
* Limit the number of points that can be passed through (i.e.,
* sets the output sample size).
*/
vtkSetClampMacro(MaximumNumberOfPoints,vtkIdType,0,VTK_ID_MAX);
vtkGetMacro(MaximumNumberOfPoints,vtkIdType);
//@}
//@{
/**
* Start sampling with this point. Ignored by certain random modes.
*/
vtkSetClampMacro(Offset,vtkIdType,0,VTK_ID_MAX);
vtkGetMacro(Offset,vtkIdType);
//@}
//@{
/**
* Special flag causes randomization of point selection.
*/
vtkSetMacro(RandomMode,int);
vtkGetMacro(RandomMode,int);
vtkBooleanMacro(RandomMode,int);
//@}
//@{
/**
* Special mode selector that switches between random mode types.
* 0 - randomized strides: randomly strides through the data (default);
* fairly certain that this is not a statistically random sample
* because the output depends on the order of the input and
* the input points do not have an equal chance to appear in the output
* (plus Vitter's incremental random algorithms are more complex
* than this, while not a proof it is good indication this isn't
* a statistically random sample - the closest would be algorithm S)
* 1 - random sample: create a statistically random sample using Vitter's
* incremental algorithm D without A described in Vitter
* "Faster Mthods for Random Sampling", Communications of the ACM
* Volume 27, Issue 7, 1984
* (OnRatio and Offset are ignored) O(sample size)
* 2 - spatially stratified random sample: create a spatially
* stratified random sample using the first method described in
* Woodring et al. "In-situ Sampling of a Large-Scale Particle
* Simulation for Interactive Visualization and Analysis",
* Computer Graphics Forum, 2011 (EuroVis 2011).
* (OnRatio and Offset are ignored) O(N log N)
*/
vtkSetClampMacro(RandomModeType, int, 0, 2);
vtkGetMacro(RandomModeType, int);
//@}
//@{
/**
* THIS ONLY WORKS WITH THE PARALLEL IMPLEMENTATION vtkPMaskPoints RUNNING
* IN PARALLEL.
* NOTHING WILL CHANGE IF THIS IS NOT THE PARALLEL vtkPMaskPoints.
* Determines whether maximum number of points is taken per processor
* (default) or if the maximum number of points is proportionally
* taken across processors (i.e., number of points per
* processor = points on a processor * maximum number of points /
* total points across all processors). In the first case,
* the total number of points = maximum number of points *
* number of processors. In the second case, the total number of
* points = maximum number of points.
*/
vtkSetMacro(ProportionalMaximumNumberOfPoints, int);
vtkGetMacro(ProportionalMaximumNumberOfPoints, int);
vtkBooleanMacro(ProportionalMaximumNumberOfPoints, int);
//@}
//@{
/**
* Generate output polydata vertices as well as points. A useful
* convenience method because vertices are drawn (they are topology) while
* points are not (they are geometry). By default this method is off.
*/
vtkSetMacro(GenerateVertices,int);
vtkGetMacro(GenerateVertices,int);
vtkBooleanMacro(GenerateVertices,int);
//@}
//@{
/**
* When vertex generation is enabled, by default vertices are produced
* as multi-vertex cells (more than one per cell), if you wish to have
* a single vertex per cell, enable this flag.
*/
vtkSetMacro(SingleVertexPerCell,int);
vtkGetMacro(SingleVertexPerCell,int);
vtkBooleanMacro(SingleVertexPerCell,int);
//@}
//@{
/**
* Set/get the desired precision for the output types. See the documentation
* for the vtkAlgorithm::DesiredOutputPrecision enum for an explanation of
* the available precision settings.
*/
vtkSetMacro(OutputPointsPrecision,int);
vtkGetMacro(OutputPointsPrecision,int);
//@}
protected:
vtkMaskPoints();
~vtkMaskPoints() VTK_OVERRIDE {}
int RequestData(vtkInformation *, vtkInformationVector **,
vtkInformationVector *) VTK_OVERRIDE;
int FillInputPortInformation(int port, vtkInformation *info) VTK_OVERRIDE;
int OnRatio; // every OnRatio point is on; all others are off.
vtkIdType Offset; // offset (or starting point id)
int RandomMode; // turn on/off randomization
vtkIdType MaximumNumberOfPoints;
int GenerateVertices; //generate polydata verts
int SingleVertexPerCell;
int RandomModeType; // choose the random sampling mode
int ProportionalMaximumNumberOfPoints;
int OutputPointsPrecision;
virtual void InternalScatter(unsigned long*, unsigned long *, int, int) {}
virtual void InternalGather(unsigned long*, unsigned long*, int, int) {}
virtual int InternalGetNumberOfProcesses() { return 1; };
virtual int InternalGetLocalProcessId() { return 0; };
virtual void InternalBarrier() {}
unsigned long GetLocalSampleSize(vtkIdType, int);
private:
vtkMaskPoints(const vtkMaskPoints&) VTK_DELETE_FUNCTION;
void operator=(const vtkMaskPoints&) VTK_DELETE_FUNCTION;
};
#endif