137 lines
4.4 KiB
C++
137 lines
4.4 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkRemovePolyData.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 vtkRemovePolyData
|
|
* @brief Removes vtkPolyData cells from an input vtkPolyData
|
|
*
|
|
* vtkRemovePolyData is a filter that removes cells from an input vtkPolyData
|
|
* (defined in the first input #0), and produces an output vtkPolyData (which
|
|
* may be empty). The cells to remove are specified in the following ways:
|
|
* 1) a list of cell ids can be provided; 2) a list of point ids can be
|
|
* provided - any cell using one or more of the points indicated is removed;
|
|
* and 3) one or more additional vtkPolyData inputs can be provided -
|
|
* matching cells are deleted. These three methods can be used in combination
|
|
* if desired. Point and cell attribute data associated with the remaining
|
|
* cells are copied to the output.
|
|
*
|
|
* @warning
|
|
* The filter vtkAppendPolyData enables appending multiple input
|
|
* vtkPolyData's together. So vtkAppendPolyData functions as an
|
|
* approximate inverse operation to vtkRemovePolyData.
|
|
*
|
|
* @warning
|
|
* The output point type is the same as the (first) input point type.
|
|
*
|
|
* @sa
|
|
* vtkAppendPolyData
|
|
*/
|
|
|
|
#ifndef vtkRemovePolyData_h
|
|
#define vtkRemovePolyData_h
|
|
|
|
#include "vtkFiltersGeneralModule.h" // For export macro
|
|
#include "vtkPolyDataAlgorithm.h"
|
|
|
|
class vtkCellArray;
|
|
class vtkDataArray;
|
|
class vtkPoints;
|
|
class vtkPolyData;
|
|
class vtkIdTypeArray;
|
|
|
|
class VTKFILTERSGENERAL_EXPORT vtkRemovePolyData : public vtkPolyDataAlgorithm
|
|
{
|
|
public:
|
|
///@{
|
|
/**
|
|
* Standard methods to instantiate, obtain information, and print information.
|
|
*
|
|
*/
|
|
static vtkRemovePolyData* New();
|
|
vtkTypeMacro(vtkRemovePolyData, vtkPolyDataAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent) override;
|
|
///@}
|
|
|
|
/**
|
|
* Remove a vtkPolyData dataset from the list of data.
|
|
*/
|
|
void RemoveInputData(vtkPolyData*);
|
|
|
|
///@{
|
|
/**
|
|
* Get any input of this filter.
|
|
*/
|
|
vtkPolyData* GetInput(int idx);
|
|
vtkPolyData* GetInput() { return this->GetInput(0); }
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Set/Get the list of cell ids to delete. These are cell ids of the input
|
|
* polydata - note that polydata with mixed cell types (e.g., verts, lines,
|
|
* polys, and/or strips), the cell ids begin with the vertex cells, then
|
|
* line cells, then polygonal cells, and finally triangle strips.
|
|
*/
|
|
void SetCellIds(vtkIdTypeArray*);
|
|
vtkGetObjectMacro(CellIds, vtkIdTypeArray);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* Set/Get the list of points ids to delete. Any cells using any of the
|
|
* points listed are removed.
|
|
*/
|
|
void SetPointIds(vtkIdTypeArray*);
|
|
vtkGetObjectMacro(PointIds, vtkIdTypeArray);
|
|
///@}
|
|
|
|
///@{
|
|
/**
|
|
* ExactMatch controls how the matching of cells when additional input
|
|
* vtkPolyDatas are provided. When ExactMatch is enabled, then if any
|
|
* input0 cell Ci uses all of the point ids in cells specified in inputs
|
|
* [1,N) Cn, and the number of point ids in Ci == Cn, then a match occurs
|
|
* and the cell is marked for deletion. Without ExactMatch enabled, if Ci
|
|
* uses all of the points in Cn, even though the cell connectivity list
|
|
* sizes are not the same size, a match occurs. This can be used to perform
|
|
* tricks like marking all of the cells that use a point or edge to be
|
|
* deleted. ExactMatch is disabled by default since it takes a extra
|
|
* computation time.
|
|
*/
|
|
vtkSetMacro(ExactMatch, bool);
|
|
vtkGetMacro(ExactMatch, bool);
|
|
vtkBooleanMacro(ExactMatch, bool);
|
|
///@}
|
|
|
|
protected:
|
|
vtkRemovePolyData();
|
|
~vtkRemovePolyData() override;
|
|
|
|
// Usual data generation related methods
|
|
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
|
|
int FillInputPortInformation(int, vtkInformation*) override;
|
|
|
|
private:
|
|
vtkIdTypeArray* CellIds;
|
|
vtkIdTypeArray* PointIds;
|
|
bool ExactMatch;
|
|
|
|
private:
|
|
vtkRemovePolyData(const vtkRemovePolyData&) = delete;
|
|
void operator=(const vtkRemovePolyData&) = delete;
|
|
};
|
|
|
|
#endif
|