This file is indexed.

/usr/include/vtk-7.1/vtkRectilinearGridToTetrahedra.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
/*=========================================================================

  Program:   Visualization Toolkit
  Module:    vtkRectilinearGridToTetrahedra.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   vtkRectilinearGridToTetrahedra
 * @brief   create a Tetrahedral mesh from a RectilinearGrid
 *
 * vtkRectilinearGridToTetrahedra forms a mesh of Tetrahedra from a
 * vtkRectilinearGrid.  The tetrahedra can be 5 per cell, 6 per cell,
 * or a mixture of 5 or 12 per cell. The resulting mesh is consistent,
 * meaning that there are no edge crossings and that each tetrahedron
 * face is shared by two tetrahedra, except those tetrahedra on the
 * boundary. All tetrahedra are right handed.
 *
 * Note that 12 tetrahedra per cell means adding a point in the
 * center of the cell.
 *
 * In order to subdivide some cells into 5 and some cells into 12 tetrahedra:
 * SetTetraPerCellTo5And12();
 * Set the Scalars of the Input RectilinearGrid to be 5 or 12
 * depending on what you want per cell of the RectilinearGrid.
 *
 * If you set RememberVoxelId, the scalars of the tetrahedron
 * will be set to the Id of the Cell in the RectilinearGrid from which
 * the tetrahedron came.
 *
 * @par Thanks:
 *    This class was developed by Samson J. Timoner of the
 *    MIT Artificial Intelligence Laboratory
 *
 * @sa
 *    vtkDelaunay3D
*/

#ifndef vtkRectilinearGridToTetrahedra_h
#define vtkRectilinearGridToTetrahedra_h

// ways to create the mesh from voxels
#define VTK_VOXEL_TO_12_TET      12
#define VTK_VOXEL_TO_5_TET        5
#define VTK_VOXEL_TO_6_TET        6
#define VTK_VOXEL_TO_5_AND_12_TET -1

#include "vtkFiltersGeneralModule.h" // For export macro
#include "vtkUnstructuredGridAlgorithm.h"
class vtkRectilinearGrid;
class vtkSignedCharArray;
class vtkIdList;
class vtkCellArray;
class vtkPoints;

class VTKFILTERSGENERAL_EXPORT vtkRectilinearGridToTetrahedra : public vtkUnstructuredGridAlgorithm
{
public:
  vtkTypeMacro(vtkRectilinearGridToTetrahedra,vtkUnstructuredGridAlgorithm);
  void PrintSelf(ostream& os, vtkIndent indent) VTK_OVERRIDE;

  /**
   * Form 5 Tetrahedra per cube. Do not RememberVoxelId.
   */
  static vtkRectilinearGridToTetrahedra *New();

  //@{
  /**
   * Set the method to divide each cell (voxel) in the RectilinearGrid
   * into tetrahedra.
   */
  void SetTetraPerCellTo5()      {SetTetraPerCell(VTK_VOXEL_TO_5_TET);};
  void SetTetraPerCellTo6()      {SetTetraPerCell(VTK_VOXEL_TO_6_TET);};
  void SetTetraPerCellTo12()     {SetTetraPerCell(VTK_VOXEL_TO_12_TET);};
  void SetTetraPerCellTo5And12() {SetTetraPerCell(VTK_VOXEL_TO_5_AND_12_TET);};
  vtkSetMacro(TetraPerCell,int);
  vtkGetMacro(TetraPerCell,int);
  //@}

  //@{
  /**
   * Should the tetrahedra have scalar data
   * indicating which Voxel they came from in the vtkRectilinearGrid?
   */
  vtkSetMacro(RememberVoxelId,int);
  vtkGetMacro(RememberVoxelId,int);
  vtkBooleanMacro(RememberVoxelId,int);
  //@}

  /**
   * This function for convenience for creating a Rectilinear Grid
   * If Spacing does not fit evenly into extent, the last cell will
   * have a different width (or height or depth).
   * If Extent[i]/Spacing[i] is within tol of an integer, then
   * assume the programmer meant an integer for direction i.
   */
  void SetInput(const double Extent[3], const double Spacing[3],
                const double tol=0.001);
  /**
   * This version of the function for the wrappers
   */
  void SetInput(const double ExtentX,
                const double ExtentY,
                const double ExtentZ,
                const double SpacingX,
                const double SpacingY,
                const double SpacingZ,
                const double tol=0.001);

protected:
  vtkRectilinearGridToTetrahedra();
  ~vtkRectilinearGridToTetrahedra() VTK_OVERRIDE {}

  int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) VTK_OVERRIDE;

  int RememberVoxelId;
  int TetraPerCell;

  int FillInputPortInformation(int, vtkInformation*) VTK_OVERRIDE;

 private:
  vtkRectilinearGridToTetrahedra(const vtkRectilinearGridToTetrahedra&) VTK_DELETE_FUNCTION;

  void operator=(const vtkRectilinearGridToTetrahedra&) VTK_DELETE_FUNCTION;

  /**
   * Determine how to Divide each cell (voxel) in the RectilinearGrid
   * Overwrites VoxelSubdivisionType with flipping information for forming the mesh
   */
  static void DetermineGridDivisionTypes(vtkRectilinearGrid *RectGrid,
                                         vtkSignedCharArray *VoxelSubdivisionType,
                                         const int &TetraPerCell);

  /**
   * Take the grid and make it into a tetrahedral mesh.
   */
  static void GridToTetMesh(vtkRectilinearGrid *RectGrid,
                            vtkSignedCharArray *VoxelSubdivisionType,
                            const int &TetraPerCell,
                            const int &RememberVoxelId,
                            vtkUnstructuredGrid *TetMesh);

  /**
   * Take a voxel and make tetrahedra out of it.
   * Add the resulting tetrahedra to TetraMesh. Also, should new
   * points need to be created, add them to NodeList.
   * Note that vtkIdList may be changed during this process (a point added).
   */
  static int TetrahedralizeVoxel(vtkIdList *VoxelCorners,
                                 const int &DivisionType,
                                 vtkPoints *NodeList,
                                 vtkCellArray *TetList);

  /**
   * Helper Function for TetrahedraizeVoxel
   * Adds a center point in the middle of the voxel
   */
  static inline void TetrahedralizeAddCenterPoint(vtkIdList *VoxelCorners,
                                                  vtkPoints *NodeList);

};

#endif /* vtkRectilinearGridToTetrahedra_h */