141 lines
4.5 KiB
C++
141 lines
4.5 KiB
C++
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: vtkExtractBlockUsingDataAssembly.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 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
|
|
|
|
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;
|
|
};
|
|
|
|
#endif
|