// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen // SPDX-FileCopyrightText: Copyright (c) Kitware, Inc. // SPDX-License-Identifier: BSD-3-Clause /** * @class vtkDataSetRegionSurfaceFilter * @brief Extract surface of materials. * * This filter extracts surfaces of materials such that a surface * could have a material on each side of it. It also stores a * mapping of the original cells and their sides back to the original grid * so that we can output boundary information for those cells given * only surfaces. */ #ifndef vtkDataSetRegionSurfaceFilter_h #define vtkDataSetRegionSurfaceFilter_h #include "vtkFiltersGeometryModule.h" // For export macro #include "vtkDataSetSurfaceFilter.h" VTK_ABI_NAMESPACE_BEGIN class vtkCharArray; class VTKFILTERSGEOMETRY_EXPORT vtkDataSetRegionSurfaceFilter : public vtkDataSetSurfaceFilter { public: static vtkDataSetRegionSurfaceFilter* New(); vtkTypeMacro(vtkDataSetRegionSurfaceFilter, vtkDataSetSurfaceFilter); void PrintSelf(ostream& os, vtkIndent indent) override; ///@{ /** * The name of the cell based array that we use to extract interfaces from * Default is "Regions" */ vtkSetStringMacro(RegionArrayName); vtkGetStringMacro(RegionArrayName); ///@} int UnstructuredGridExecute(vtkDataSet* input, vtkPolyData* output) override; // make it clear we want all the recordOrigCellId signatures from our parent using vtkDataSetSurfaceFilter::RecordOrigCellId; // override one of the signatures void RecordOrigCellId(vtkIdType newIndex, vtkFastGeomQuad* quad) override; ///@{ /** * Whether to return single sided material interfaces or double sided * Default is single */ vtkSetMacro(SingleSided, bool); vtkGetMacro(SingleSided, bool); ///@} ///@{ /** * The name of the field array that has characteristics of each material * Default is "material_properties" */ vtkSetStringMacro(MaterialPropertiesName); vtkGetStringMacro(MaterialPropertiesName); ///@} ///@{ /** * The name of the field array that has material type identifiers in it * Default is "material_ids" */ vtkSetStringMacro(MaterialIDsName); vtkGetStringMacro(MaterialIDsName); ///@} ///@{ /** * The name of the output field array that records parent materials of each interface * Default is "material_ancestors" */ vtkSetStringMacro(MaterialPIDsName); vtkGetStringMacro(MaterialPIDsName); ///@} ///@{ /** * The name of the field array that has material interface type identifiers in it * Default is "interface_ids" */ vtkSetStringMacro(InterfaceIDsName); vtkGetStringMacro(InterfaceIDsName); ///@} protected: vtkDataSetRegionSurfaceFilter(); ~vtkDataSetRegionSurfaceFilter() override; int FillInputPortInformation(int port, vtkInformation* info) override; /// Implementation of the algorithm. int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override; virtual void InsertQuadInHash( vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType d, vtkIdType sourceId, vtkIdType faceId); void InsertQuadInHash( vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType d, vtkIdType sourceId) override { this->InsertQuadInHash(a, b, c, d, sourceId, -1); // for -Woverloaded-virtual comp warning } void InsertTriInHash( vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType sourceId, vtkIdType faceId) override; virtual void InsertTriInHash(vtkIdType a, vtkIdType b, vtkIdType c, vtkIdType sourceId) { this->InsertTriInHash(a, b, c, sourceId, -1); // for -Woverloaded-virtual comp warning } virtual vtkFastGeomQuad* GetNextVisibleQuadFromHash(); private: vtkDataSetRegionSurfaceFilter(const vtkDataSetRegionSurfaceFilter&) = delete; void operator=(const vtkDataSetRegionSurfaceFilter&) = delete; char* RegionArrayName; vtkIntArray* RegionArray; vtkIdTypeArray* OrigCellIds; vtkCharArray* CellFaceIds; bool SingleSided; char* MaterialPropertiesName; char* MaterialIDsName; char* MaterialPIDsName; char* InterfaceIDsName; class Internals; Internals* Internal; }; VTK_ABI_NAMESPACE_END #endif