/usr/include/vtk-7.1/vtkSelectPolyData.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 225 226 227 | /*=========================================================================
Program: Visualization Toolkit
Module: vtkSelectPolyData.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 vtkSelectPolyData
* @brief select portion of polygonal mesh; generate selection scalars
*
* vtkSelectPolyData is a filter that selects polygonal data based on
* defining a "loop" and indicating the region inside of the loop. The
* mesh within the loop consists of complete cells (the cells are not
* cut). Alternatively, this filter can be used to generate scalars.
* These scalar values, which are a distance measure to the loop, can
* be used to clip, contour. or extract data (i.e., anything that an
* implicit function can do).
*
* The loop is defined by an array of x-y-z point coordinates.
* (Coordinates should be in the same coordinate space as the input
* polygonal data.) The loop can be concave and non-planar, but not
* self-intersecting. The input to the filter is a polygonal mesh
* (only surface primitives such as triangle strips and polygons); the
* output is either a) a portion of the original mesh laying within
* the selection loop (GenerateSelectionScalarsOff); or b) the same
* polygonal mesh with the addition of scalar values
* (GenerateSelectionScalarsOn).
*
* The algorithm works as follows. For each point coordinate in the
* loop, the closest point in the mesh is found. The result is a loop
* of closest point ids from the mesh. Then, the edges in the mesh
* connecting the closest points (and laying along the lines forming
* the loop) are found. A greedy edge tracking procedure is used as
* follows. At the current point, the mesh edge oriented in the
* direction of and whose end point is closest to the line is
* chosen. The edge is followed to the new end point, and the
* procedure is repeated. This process continues until the entire loop
* has been created.
*
* To determine what portion of the mesh is inside and outside of the
* loop, three options are possible. 1) the smallest connected region,
* 2) the largest connected region, and 3) the connected region
* closest to a user specified point. (Set the ivar SelectionMode.)
*
* Once the loop is computed as above, the GenerateSelectionScalars
* controls the output of the filter. If on, then scalar values are
* generated based on distance to the loop lines. Otherwise, the cells
* laying inside the selection loop are output. By default, the mesh
* laying within the loop is output; however, if InsideOut is on, then
* the portion of the mesh laying outside of the loop is output.
*
* The filter can be configured to generate the unselected portions of
* the mesh as output by setting GenerateUnselectedOutput. Use the
* method GetUnselectedOutput to access this output. (Note: this flag
* is pertinent only when GenerateSelectionScalars is off.)
*
* @warning
* Make sure that the points you pick are on a connected surface. If
* not, then the filter will generate an empty or partial result. Also,
* self-intersecting loops will generate unpredictable results.
*
* @warning
* During processing of the data, non-triangular cells are converted to
* triangles if GenerateSelectionScalars is off.
*
* @sa
* vtkImplicitSelectionLoop
*/
#ifndef vtkSelectPolyData_h
#define vtkSelectPolyData_h
#include "vtkFiltersModelingModule.h" // For export macro
#include "vtkPolyDataAlgorithm.h"
#define VTK_INSIDE_SMALLEST_REGION 0
#define VTK_INSIDE_LARGEST_REGION 1
#define VTK_INSIDE_CLOSEST_POINT_REGION 2
class vtkCharArray;
class vtkPoints;
class vtkIdList;
class VTKFILTERSMODELING_EXPORT vtkSelectPolyData : public vtkPolyDataAlgorithm
{
public:
/**
* Instantiate object with InsideOut turned off, and
* GenerateSelectionScalars turned off. The unselected output
* is not generated, and the inside mode is the smallest region.
*/
static vtkSelectPolyData *New();
vtkTypeMacro(vtkSelectPolyData,vtkPolyDataAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent);
//@{
/**
* Set/Get the flag to control behavior of the filter. If
* GenerateSelectionScalars is on, then the output of the filter
* is the same as the input, except that scalars are generated.
* If off, the filter outputs the cells laying inside the loop, and
* does not generate scalars.
*/
vtkSetMacro(GenerateSelectionScalars,int);
vtkGetMacro(GenerateSelectionScalars,int);
vtkBooleanMacro(GenerateSelectionScalars,int);
//@}
//@{
/**
* Set/Get the InsideOut flag. When off, the mesh within the loop is
* extracted. When on, the mesh outside the loop is extracted.
*/
vtkSetMacro(InsideOut,int);
vtkGetMacro(InsideOut,int);
vtkBooleanMacro(InsideOut,int);
//@}
//@{
/**
* Set/Get the array of point coordinates defining the loop. There must
* be at least three points used to define a loop.
*/
virtual void SetLoop(vtkPoints*);
vtkGetObjectMacro(Loop,vtkPoints);
//@}
//@{
/**
* Set/Get the point used in SelectionModeToClosestPointRegion.
*/
vtkSetVector3Macro(ClosestPoint,double);
vtkGetVector3Macro(ClosestPoint,double);
//@}
//@{
/**
* Control how inside/outside of loop is defined.
*/
vtkSetClampMacro(SelectionMode,int,
VTK_INSIDE_SMALLEST_REGION,VTK_INSIDE_CLOSEST_POINT_REGION);
vtkGetMacro(SelectionMode,int);
void SetSelectionModeToSmallestRegion()
{this->SetSelectionMode(VTK_INSIDE_SMALLEST_REGION);};
void SetSelectionModeToLargestRegion()
{this->SetSelectionMode(VTK_INSIDE_LARGEST_REGION);};
void SetSelectionModeToClosestPointRegion()
{this->SetSelectionMode(VTK_INSIDE_CLOSEST_POINT_REGION);};
const char *GetSelectionModeAsString();
//@}
//@{
/**
* Control whether a second output is generated. The second output
* contains the polygonal data that's not been selected.
*/
vtkSetMacro(GenerateUnselectedOutput,int);
vtkGetMacro(GenerateUnselectedOutput,int);
vtkBooleanMacro(GenerateUnselectedOutput,int);
//@}
/**
* Return output that hasn't been selected (if GenreateUnselectedOutput is
* enabled).
*/
vtkPolyData *GetUnselectedOutput();
/**
* Return the (mesh) edges of the selection region.
*/
vtkPolyData *GetSelectionEdges();
// Overload GetMTime() because we depend on Loop
vtkMTimeType GetMTime();
protected:
vtkSelectPolyData();
~vtkSelectPolyData();
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *);
int GenerateSelectionScalars;
int InsideOut;
vtkPoints *Loop;
int SelectionMode;
double ClosestPoint[3];
int GenerateUnselectedOutput;
private:
vtkPolyData *Mesh;
void GetPointNeighbors (vtkIdType ptId, vtkIdList *nei);
private:
vtkSelectPolyData(const vtkSelectPolyData&) VTK_DELETE_FUNCTION;
void operator=(const vtkSelectPolyData&) VTK_DELETE_FUNCTION;
};
//@{
/**
* Return the method of determining in/out of loop as a string.
*/
inline const char *vtkSelectPolyData::GetSelectionModeAsString(void)
{
if ( this->SelectionMode == VTK_INSIDE_SMALLEST_REGION )
{
return "InsideSmallestRegion";
}
else if ( this->SelectionMode == VTK_INSIDE_LARGEST_REGION )
{
return "InsideLargestRegion";
}
else
{
return "InsideClosestPointRegion";
}
}
//@}
#endif
|