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
|
// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
// SPDX-License-Identifier: BSD-3-Clause
/**
* @class vtkProgrammableDataObjectSource
* @brief generate source data object via a user-specified function
*
* vtkProgrammableDataObjectSource is a source object that is programmable by
* the user. The output of the filter is a data object (vtkDataObject) which
* represents data via an instance of field data. To use this object, you
* must specify a function that creates the output.
*
* Example use of this filter includes reading tabular data and encoding it
* as vtkFieldData. You can then use filters like vtkDataObjectToDataSetFilter
* to convert the data object to a dataset and then visualize it. Another
* important use of this class is that it allows users of interpreters (e.g.,
* Java) the ability to write source objects without having to
* recompile C++ code or generate new libraries.
*
* @sa
* vtkProgrammableFilter vtkProgrammableAttributeDataFilter
* vtkProgrammableSource vtkDataObjectToDataSetFilter
*/
#ifndef vtkProgrammableDataObjectSource_h
#define vtkProgrammableDataObjectSource_h
#include "vtkDataObjectAlgorithm.h"
#include "vtkFiltersSourcesModule.h" // For export macro
VTK_ABI_NAMESPACE_BEGIN
class VTKFILTERSSOURCES_EXPORT vtkProgrammableDataObjectSource : public vtkDataObjectAlgorithm
{
public:
static vtkProgrammableDataObjectSource* New();
vtkTypeMacro(vtkProgrammableDataObjectSource, vtkDataObjectAlgorithm);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Signature definition for programmable method callbacks. Methods passed to
* SetExecuteMethod or SetExecuteMethodArgDelete must conform to this
* signature.
* The presence of this typedef is useful for reference and for external
* analysis tools, but it cannot be used in the method signatures in these
* header files themselves because it prevents the internal VTK wrapper
* generators from wrapping these methods.
*/
typedef void (*ProgrammableMethodCallbackType)(void* arg);
/**
* Specify the function to use to generate the output data object. Note
* that the function takes a single (void *) argument.
*/
void SetExecuteMethod(void (*f)(void*), void* arg);
/**
* Set the arg delete method. This is used to free user memory.
*/
void SetExecuteMethodArgDelete(void (*f)(void*));
protected:
vtkProgrammableDataObjectSource();
~vtkProgrammableDataObjectSource() override;
int RequestData(vtkInformation*, vtkInformationVector**, vtkInformationVector*) override;
ProgrammableMethodCallbackType ExecuteMethod; // function to invoke
ProgrammableMethodCallbackType ExecuteMethodArgDelete;
void* ExecuteMethodArg;
private:
vtkProgrammableDataObjectSource(const vtkProgrammableDataObjectSource&) = delete;
void operator=(const vtkProgrammableDataObjectSource&) = delete;
};
VTK_ABI_NAMESPACE_END
#endif
|