/*========================================================================= Program: Visualization Toolkit Module: vtkStripper.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 vtkStripper * @brief create triangle strips and/or poly-lines * * * vtkStripper is a filter that generates triangle strips and/or poly-lines * from input polygons, triangle strips, and lines. Input polygons are * assembled into triangle strips only if they are triangles; other types of * polygons are passed through to the output and not stripped. (Use * vtkTriangleFilter to triangulate non-triangular polygons prior to running * this filter if you need to strip all the data.) The filter will pass * through (to the output) vertices if they are present in the input * polydata. Also note that if triangle strips or polylines are defined in * the input they are passed through and not joined nor extended. (If you wish * to strip these use vtkTriangleFilter to fragment the input into triangles * and lines prior to running vtkStripper.) * * The ivar MaximumLength can be used to control the maximum * allowable triangle strip and poly-line length. * * By default, this filter discards any cell data associated with the input. * Thus is because the cell structure changes and and the old cell data * is no longer valid. When PassCellDataAsFieldData flag is set, * the cell data is passed as FieldData to the output using the following rule: * 1) for every cell in the output that is not a triangle strip, * the cell data is inserted once per cell in the output field data. * 2) for every triangle strip cell in the output: * ii) 1 tuple is inserted for every point(j|j>=2) in the strip. * This is the cell data for the cell formed by (j-2, j-1, j) in * the input. * The field data order is same as cell data i.e. (verts,line,polys,tsrips). * * @warning * If triangle strips or poly-lines exist in the input data they will * be passed through to the output data. This filter will only construct * triangle strips if triangle polygons are available; and will only * construct poly-lines if lines are available. * * @sa * vtkTriangleFilter */ #ifndef vtkStripper_h #define vtkStripper_h #include "vtkFiltersCoreModule.h" // For export macro #include "vtkPolyDataAlgorithm.h" class VTKFILTERSCORE_EXPORT vtkStripper : public vtkPolyDataAlgorithm { public: vtkTypeMacro(vtkStripper, vtkPolyDataAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; /** * Construct object with MaximumLength set to 1000. */ static vtkStripper* New(); //@{ /** * Specify the maximum number of triangles in a triangle strip, * and/or the maximum number of lines in a poly-line. */ vtkSetClampMacro(MaximumLength, int, 4, 100000); vtkGetMacro(MaximumLength, int); //@} //@{ /** * Enable/Disable passing of the CellData in the input to * the output as FieldData. Note the field data is transformed. */ vtkBooleanMacro(PassCellDataAsFieldData, vtkTypeBool); vtkSetMacro(PassCellDataAsFieldData, vtkTypeBool); vtkGetMacro(PassCellDataAsFieldData, vtkTypeBool); //@} //@{ /** * If on, the output polygonal dataset will have a celldata array that * holds the cell index of the original 3D cell that produced each output * cell. This is useful for picking. The default is off to conserve * memory. */ vtkSetMacro(PassThroughCellIds, vtkTypeBool); vtkGetMacro(PassThroughCellIds, vtkTypeBool); vtkBooleanMacro(PassThroughCellIds, vtkTypeBool); //@} //@{ /** * If on, the output polygonal dataset will have a pointdata array that * holds the point index of the original vertex that produced each output * vertex. This is useful for picking. The default is off to conserve * memory. */ vtkSetMacro(PassThroughPointIds, vtkTypeBool); vtkGetMacro(PassThroughPointIds, vtkTypeBool); vtkBooleanMacro(PassThroughPointIds, vtkTypeBool); //@} //@{ /** * If on, the output polygonal segments will be joined if they are * contiguous. This is useful after slicing a surface. The default * is off. */ vtkSetMacro(JoinContiguousSegments, vtkTypeBool); vtkGetMacro(JoinContiguousSegments, vtkTypeBool); vtkBooleanMacro(JoinContiguousSegments, vtkTypeBool); //@} protected: vtkStripper(); ~vtkStripper() override {} // Usual data generation method int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; int MaximumLength; vtkTypeBool PassCellDataAsFieldData; vtkTypeBool PassThroughCellIds; vtkTypeBool PassThroughPointIds; vtkTypeBool JoinContiguousSegments; private: vtkStripper(const vtkStripper&) = delete; void operator=(const vtkStripper&) = delete; }; #endif