/usr/include/vtk-7.1/vtkCleanPolyData.h is in libvtk7-dev 7.1.1+dfsg1-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkCleanPolyData.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 vtkCleanPolyData
* @brief merge duplicate points, and/or remove unused points and/or remove degenerate cells
*
* vtkCleanPolyData is a filter that takes polygonal data as input and
* generates polygonal data as output. vtkCleanPolyData will merge duplicate
* points (within specified tolerance and if enabled), eliminate points
* that are not used in any cell, and if enabled, transform degenerate cells into
* appropriate forms (for example, a triangle is converted into a line
* if two points of triangle are merged).
*
* Conversion of degenerate cells is controlled by the flags
* ConvertLinesToPoints, ConvertPolysToLines, ConvertStripsToPolys which act
* cumulatively such that a degenerate strip may become a poly.
* The full set is
* Line with 1 points -> Vert (if ConvertLinesToPoints)
* Poly with 2 points -> Line (if ConvertPolysToLines)
* Poly with 1 points -> Vert (if ConvertPolysToLines && ConvertLinesToPoints)
* Strp with 3 points -> Poly (if ConvertStripsToPolys)
* Strp with 2 points -> Line (if ConvertStripsToPolys && ConvertPolysToLines)
* Strp with 1 points -> Vert (if ConvertStripsToPolys && ConvertPolysToLines
* && ConvertLinesToPoints)
*
* If tolerance is specified precisely=0.0, then vtkCleanPolyData will use
* the vtkMergePoints object to merge points (which is faster). Otherwise the
* slower vtkIncrementalPointLocator is used. Before inserting points into the point
* locator, this class calls a function OperateOnPoint which can be used (in
* subclasses) to further refine the cleaning process. See
* vtkQuantizePolyDataPoints.
*
* Note that merging of points can be disabled. In this case, a point locator
* will not be used, and points that are not used by any cells will be
* eliminated, but never merged.
*
* @warning
* Merging points can alter topology, including introducing non-manifold
* forms. The tolerance should be chosen carefully to avoid these problems.
* Subclasses should handle OperateOnBounds as well as OperateOnPoint
* to ensure that the locator is correctly initialized (i.e. all modified
* points must lie inside modified bounds).
*
* @warning
* If you wish to operate on a set of coordinates
* that has no cells, you must add a vtkPolyVertex cell with all of the points to the PolyData
* (or use a vtkVertexGlyphFilter) before using the vtkCleanPolyData filter.
*
* @sa
* vtkQuantizePolyDataPoints
*/
#ifndef vtkCleanPolyData_h
#define vtkCleanPolyData_h
#include "vtkFiltersCoreModule.h" // For export macro
#include "vtkPolyDataAlgorithm.h"
class vtkIncrementalPointLocator;
class VTKFILTERSCORE_EXPORT vtkCleanPolyData : public vtkPolyDataAlgorithm
{
public:
static vtkCleanPolyData *New();
void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;
vtkTypeMacro(vtkCleanPolyData,vtkPolyDataAlgorithm);
//@{
/**
* By default ToleranceIsAbsolute is false and Tolerance is
* a fraction of Bounding box diagonal, if true, AbsoluteTolerance is
* used when adding points to locator (merging)
*/
vtkSetMacro(ToleranceIsAbsolute,int);
vtkBooleanMacro(ToleranceIsAbsolute,int);
vtkGetMacro(ToleranceIsAbsolute,int);
//@}
//@{
/**
* Specify tolerance in terms of fraction of bounding box length.
* Default is 0.0.
*/
vtkSetClampMacro(Tolerance,double,0.0,1.0);
vtkGetMacro(Tolerance,double);
//@}
//@{
/**
* Specify tolerance in absolute terms. Default is 1.0.
*/
vtkSetClampMacro(AbsoluteTolerance,double,0.0,VTK_DOUBLE_MAX);
vtkGetMacro(AbsoluteTolerance,double);
//@}
//@{
/**
* Turn on/off conversion of degenerate lines to points. Default is On.
*/
vtkSetMacro(ConvertLinesToPoints,int);
vtkBooleanMacro(ConvertLinesToPoints,int);
vtkGetMacro(ConvertLinesToPoints,int);
//@}
//@{
/**
* Turn on/off conversion of degenerate polys to lines. Default is On.
*/
vtkSetMacro(ConvertPolysToLines,int);
vtkBooleanMacro(ConvertPolysToLines,int);
vtkGetMacro(ConvertPolysToLines,int);
//@}
//@{
/**
* Turn on/off conversion of degenerate strips to polys. Default is On.
*/
vtkSetMacro(ConvertStripsToPolys,int);
vtkBooleanMacro(ConvertStripsToPolys,int);
vtkGetMacro(ConvertStripsToPolys,int);
//@}
//@{
/**
* Set/Get a boolean value that controls whether point merging is
* performed. If on, a locator will be used, and points laying within
* the appropriate tolerance may be merged. If off, points are never
* merged. By default, merging is on.
*/
vtkSetMacro(PointMerging,int);
vtkGetMacro(PointMerging,int);
vtkBooleanMacro(PointMerging,int);
//@}
//@{
/**
* Set/Get a spatial locator for speeding the search process. By
* default an instance of vtkMergePoints is used.
*/
virtual void SetLocator(vtkIncrementalPointLocator *locator);
vtkGetObjectMacro(Locator,vtkIncrementalPointLocator);
//@}
/**
* Create default locator. Used to create one when none is specified.
*/
void CreateDefaultLocator(vtkPolyData *input = 0);
/**
* Release locator
*/
void ReleaseLocator() { this->SetLocator(NULL); }
/**
* Get the MTime of this object also considering the locator.
*/
vtkMTimeType GetMTime() VTK_OVERRIDE;
/**
* Perform operation on a point
*/
virtual void OperateOnPoint(double in[3], double out[3]);
/**
* Perform operation on bounds
*/
virtual void OperateOnBounds(double in[6], double out[6]);
// This filter is difficult to stream.
// To get invariant results, the whole input must be processed at once.
// This flag allows the user to select whether strict piece invariance
// is required. By default it is on. When off, the filter can stream,
// but results may change.
vtkSetMacro(PieceInvariant, int);
vtkGetMacro(PieceInvariant, int);
vtkBooleanMacro(PieceInvariant, 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:
vtkCleanPolyData();
~vtkCleanPolyData() VTK_OVERRIDE;
// Usual data generation method
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
int RequestUpdateExtent(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;
int PointMerging;
double Tolerance;
double AbsoluteTolerance;
int ConvertLinesToPoints;
int ConvertPolysToLines;
int ConvertStripsToPolys;
int ToleranceIsAbsolute;
vtkIncrementalPointLocator *Locator;
int PieceInvariant;
int OutputPointsPrecision;
private:
vtkCleanPolyData(const vtkCleanPolyData&) VTK_DELETE_FUNCTION;
void operator=(const vtkCleanPolyData&) VTK_DELETE_FUNCTION;
};
#endif
|