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