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.

147 lines
5.1 KiB
C++

/*=========================================================================
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