1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
* @class vtkExtractBlockUsingDataAssembly
* @brief extract blocks from certain composite datasets
*
* vtkExtractBlockUsingDataAssembly is intended to extract selected blocks
* from certain composite datasets. Blocks to extract are selected using
* selectors. For supported selectors see `vtkDataAssembly::SelectNodes`.
*
* The specific data-assembly to use to apply the selectors to determine the
* blocks to extract is chosen using `vtkExtractBlockUsingDataAssembly::SetAssemblyName`.
*
* @section vtkExtractBlockUsingDataAssembly-SupportedDataTypes Supported Data Types
*
* This filter accepts `vtkUniformGridAMR`,
* `vtkMultiBlockDataSet`, and `vtkPartitionedDataSetCollection` (and
* subclasses). vtkMultiPieceDataSet and vtkPartitionedDataSet are not accepted
* as inputs since those composite datasets are not comprised of "blocks".
*
* For vtkOverlappingAMR, since extracting blocks cannot always guarantee a valid
* overlapping AMR, this filter generates a `vtkPartitionedDataSetCollection`
* instead. Any blanking information present in the input vtkOverlappingAMR is
* also discarded for the same reason.
*
* For all other supported input data types, the type is preserved.
*/
#ifndef vtkExtractBlockUsingDataAssembly_h
#define vtkExtractBlockUsingDataAssembly_h
#include "vtkCompositeDataSetAlgorithm.h"
#include "vtkFiltersExtractionModule.h" // For export macro
VTK_ABI_NAMESPACE_BEGIN
class vtkDataAssembly;
class vtkPartitionedDataSetCollection;
class VTKFILTERSEXTRACTION_EXPORT vtkExtractBlockUsingDataAssembly
: public vtkCompositeDataSetAlgorithm
{
public:
static vtkExtractBlockUsingDataAssembly* New();
vtkTypeMacro(vtkExtractBlockUsingDataAssembly, vtkCompositeDataSetAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@{
/**
* API to set selectors. Multiple selectors can be added using `AddSelector`.
* The order in which selectors are specified is not preserved and has no
* impact on the result.
*
* `AddSelector` returns true if the selector was added, false if the selector
* was already specified and hence not added.
*
* @sa vtkDataAssembly::SelectNodes
*/
bool AddSelector(const char* selector);
void ClearSelectors();
///@}
/**
* Convenience method to set a single selector.
* This clears any other existing selectors.
*/
void SetSelector(const char* selector);
///@{
/**
* API to access selectors.
*/
int GetNumberOfSelectors() const;
const char* GetSelector(int index) const;
///@}
///@{
/**
* Get/Set the active assembly to use. The chosen assembly is used
* in combination with the selectors specified to determine which blocks
* are to be extracted.
*
* By default, this is set to
* vtkDataAssemblyUtilities::HierarchyName().
*/
vtkSetStringMacro(AssemblyName);
vtkGetStringMacro(AssemblyName);
///@}
///@{
/**
* When set to true (default) subtrees for chosen paths are treated as
* selected.
*/
vtkSetMacro(SelectSubtrees, bool);
vtkGetMacro(SelectSubtrees, bool);
vtkBooleanMacro(SelectSubtrees, bool);
///@}
///@{
/**
* When set to true (default), the data assembly is pruned to remove
* branches that were not selected.
*/
vtkSetMacro(PruneDataAssembly, bool);
vtkGetMacro(PruneDataAssembly, bool);
vtkBooleanMacro(PruneDataAssembly, bool);
///@}
protected:
vtkExtractBlockUsingDataAssembly();
~vtkExtractBlockUsingDataAssembly() override;
int FillInputPortInformation(int port, vtkInformation* info) override;
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
int RequestDataObject(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
private:
vtkExtractBlockUsingDataAssembly(const vtkExtractBlockUsingDataAssembly&) = delete;
void operator=(const vtkExtractBlockUsingDataAssembly&) = delete;
class vtkInternals;
vtkInternals* Internals;
bool SelectSubtrees;
bool PruneDataAssembly;
char* AssemblyName;
};
VTK_ABI_NAMESPACE_END
#endif
|