// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkAreaContourSpectrumFilter * @brief compute an approximation of the area * contour signature (evolution of the area of the input surface along an arc of * the Reeb graph). * * The filter takes a vtkPolyData as an input (port 0), along with a * vtkReebGraph (port 1). * The Reeb graph arc to consider can be specified with SetArcId() (default: 0). * The number of (evenly distributed) samples of the signature can be defined * with SetNumberOfSamples() (default value: 100). * The filter will first try to pull as a scalar field the vtkDataArray with Id * 'FieldId' of the vtkPolyData, see SetFieldId (default: 0). The filter will * abort if this field does not exist. * * The filter outputs a vtkTable with the area contour signature * approximation, each sample being evenly distributed in the function span of * the arc. * * This filter is a typical example for designing your own contour signature * filter (with customized metrics). It also shows typical vtkReebGraph * traversals. * * Reference: * C. Bajaj, V. Pascucci, D. Schikore, * "The contour spectrum", * IEEE Visualization, 167-174, 1997. */ #ifndef vtkAreaContourSpectrumFilter_h #define vtkAreaContourSpectrumFilter_h #include "vtkDataObjectAlgorithm.h" #include "vtkFiltersGeneralModule.h" // For export macro VTK_ABI_NAMESPACE_BEGIN class vtkTable; class VTKFILTERSGENERAL_EXPORT vtkAreaContourSpectrumFilter : public vtkDataObjectAlgorithm { public: static vtkAreaContourSpectrumFilter* New(); vtkTypeMacro(vtkAreaContourSpectrumFilter, vtkDataObjectAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; ///@{ /** * Set the arc Id for which the contour signature has to be computed. * Default value: 0 */ vtkSetMacro(ArcId, vtkIdType); vtkGetMacro(ArcId, vtkIdType); ///@} ///@{ /** * Set the number of samples in the output signature * Default value: 100 */ vtkSetMacro(NumberOfSamples, int); vtkGetMacro(NumberOfSamples, int); ///@} ///@{ /** * Set the scalar field Id * Default value: 0 */ vtkSetMacro(FieldId, vtkIdType); vtkGetMacro(FieldId, vtkIdType); ///@} vtkTable* GetOutput(); protected: vtkAreaContourSpectrumFilter(); ~vtkAreaContourSpectrumFilter() override; vtkIdType ArcId, FieldId; int NumberOfSamples; int FillInputPortInformation(int portNumber, vtkInformation*) override; int FillOutputPortInformation(int portNumber, vtkInformation* info) override; int RequestData(vtkInformation* request, vtkInformationVector** inputVector, vtkInformationVector* outputVector) override; private: vtkAreaContourSpectrumFilter(const vtkAreaContourSpectrumFilter&) = delete; void operator=(const vtkAreaContourSpectrumFilter&) = delete; }; VTK_ABI_NAMESPACE_END #endif