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 131 132 133 134 135 136
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
* @class vtkDataObjectAlgorithm
* @brief Superclass for algorithms that produce only data object as output
*
*
* vtkDataObjectAlgorithm is a convenience class to make writing algorithms
* easier. It is also designed to help transition old algorithms to the new
* pipeline architecture. There are some assumptions and defaults made by this
* class you should be aware of. This class defaults such that your filter
* will have one input port and one output port. If that is not the case
* simply change it with SetNumberOfInputPorts etc. See this classes
* constructor for the default. This class also provides a FillInputPortInfo
* method that by default says that all inputs will be DataObject. If that
* isn't the case then please override this method in your subclass.
* You should implement the subclass's algorithm into
* RequestData( request, inputVec, outputVec).
*/
#ifndef vtkDataObjectAlgorithm_h
#define vtkDataObjectAlgorithm_h
#include "vtkAlgorithm.h"
#include "vtkCommonExecutionModelModule.h" // For export macro
#include "vtkDataObject.h" // makes things a bit easier
VTK_ABI_NAMESPACE_BEGIN
class vtkDataSet;
class vtkDataObject;
class VTKCOMMONEXECUTIONMODEL_EXPORT vtkDataObjectAlgorithm : public vtkAlgorithm
{
public:
static vtkDataObjectAlgorithm* New();
vtkTypeMacro(vtkDataObjectAlgorithm, vtkAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
///@{
/**
* Get the output data object for a port on this algorithm.
*/
vtkDataObject* GetOutput();
vtkDataObject* GetOutput(int);
virtual void SetOutput(vtkDataObject* d);
///@}
/**
* see vtkAlgorithm for details
*/
vtkTypeBool ProcessRequest(
vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
// this method is not recommended for use, but lots of old style filters
// use it
vtkDataObject* GetInput();
vtkDataObject* GetInput(int port);
///@{
/**
* Assign a data object as input. Note that this method does not
* establish a pipeline connection. Use SetInputConnection() to
* setup a pipeline connection.
*/
void SetInputData(vtkDataObject*);
void SetInputData(int, vtkDataObject*);
///@}
///@{
/**
* Assign a data object as input. Note that this method does not
* establish a pipeline connection. Use AddInputConnection() to
* setup a pipeline connection.
*/
void AddInputData(vtkDataObject*);
void AddInputData(int, vtkDataObject*);
///@}
protected:
vtkDataObjectAlgorithm();
~vtkDataObjectAlgorithm() override;
// convenience method
virtual int RequestInformation(vtkInformation* request, vtkInformationVector** inputVector,
vtkInformationVector* outputVector);
/**
* This is called by the superclass.
* This is the method you should override.
*/
virtual int RequestDataObject(vtkInformation*, vtkInformationVector**, vtkInformationVector*)
{
return 1;
}
/**
* This is called by the superclass.
* This is the method you should override.
*/
virtual int RequestUpdateExtent(vtkInformation*, vtkInformationVector**, vtkInformationVector*)
{
return 1;
}
virtual int RequestUpdateTime(vtkInformation*, vtkInformationVector**, vtkInformationVector*)
{
return 1;
}
virtual int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*)
{
return 1;
}
// see algorithm for more info
int FillOutputPortInformation(int port, vtkInformation* info) override;
int FillInputPortInformation(int port, vtkInformation* info) override;
/**
* A helper method that can be used by subclasses in
* `RequestDataObject` to create an output data object of the given type if
* not already present.
*
* Note, this uses `vtkDataObjectTypes::TypeIdIsA` to test types. For exact
* match, set `exact` to true.
*/
static bool SetOutputDataObject(
int dataType, vtkInformation* outputInformation, bool exact = false);
private:
vtkDataObjectAlgorithm(const vtkDataObjectAlgorithm&) = delete;
void operator=(const vtkDataObjectAlgorithm&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|