VTK  9.3.0
vtkArrayCalculator.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
72#ifndef vtkArrayCalculator_h
73#define vtkArrayCalculator_h
74
75#include "vtkDataObject.h" // For attribute types
76#include "vtkFiltersCoreModule.h" // For export macro
78#include "vtkTuple.h" // needed for vtkTuple
79#include <vector> // needed for vector
80
81VTK_ABI_NAMESPACE_BEGIN
82class vtkDataSet;
83
84class VTKFILTERSCORE_EXPORT vtkArrayCalculator : public vtkPassInputTypeAlgorithm
85{
86public:
88 void PrintSelf(ostream& os, vtkIndent indent) override;
89
91
93
96 vtkSetStringMacro(Function);
97 vtkGetStringMacro(Function);
99
101
111 void AddScalarArrayName(const char* arrayName, int component = 0);
113 const char* arrayName, int component0 = 0, int component1 = 1, int component2 = 2);
115
117
123 void AddScalarVariable(const char* variableName, const char* arrayName, int component = 0);
124 void AddVectorVariable(const char* variableName, const char* arrayName, int component0 = 0,
125 int component1 = 1, int component2 = 2);
127
129
135 void AddCoordinateScalarVariable(const char* variableName, int component = 0);
137 const char* variableName, int component0 = 0, int component1 = 1, int component2 = 2);
139
141
147 vtkSetStringMacro(ResultArrayName);
148 vtkGetStringMacro(ResultArrayName);
150
152
156 vtkGetMacro(ResultArrayType, int);
157 vtkSetMacro(ResultArrayType, int);
159
161
167 vtkGetMacro(CoordinateResults, vtkTypeBool);
168 vtkSetMacro(CoordinateResults, vtkTypeBool);
169 vtkBooleanMacro(CoordinateResults, vtkTypeBool);
171
173
178 vtkGetMacro(ResultNormals, bool);
179 vtkSetMacro(ResultNormals, bool);
180 vtkBooleanMacro(ResultNormals, bool);
182
184
189 vtkGetMacro(ResultTCoords, bool);
190 vtkSetMacro(ResultTCoords, bool);
191 vtkBooleanMacro(ResultTCoords, bool);
193
198
199 static const int DEFAULT_ATTRIBUTE_TYPE = -1;
201
207 vtkSetMacro(AttributeType, int);
208 vtkGetMacro(AttributeType, int);
209 void SetAttributeTypeToDefault() { this->SetAttributeType(DEFAULT_ATTRIBUTE_TYPE); }
210 void SetAttributeTypeToPointData() { this->SetAttributeType(vtkDataObject::POINT); }
211 void SetAttributeTypeToCellData() { this->SetAttributeType(vtkDataObject::CELL); }
212 void SetAttributeTypeToEdgeData() { this->SetAttributeType(vtkDataObject::EDGE); }
213 void SetAttributeTypeToVertexData() { this->SetAttributeType(vtkDataObject::VERTEX); }
214 void SetAttributeTypeToRowData() { this->SetAttributeType(vtkDataObject::ROW); }
216
221
225 virtual void RemoveScalarVariables();
226
230 virtual void RemoveVectorVariables();
231
236
241
243
246 const std::vector<std::string>& GetScalarArrayNames() { return this->ScalarArrayNames; }
247 std::string GetScalarArrayName(int i);
248 const std::vector<std::string>& GetVectorArrayNames() { return this->VectorArrayNames; }
249 std::string GetVectorArrayName(int i);
250 const std::vector<std::string>& GetScalarVariableNames() { return this->ScalarVariableNames; }
251 std::string GetScalarVariableName(int i);
252 const std::vector<std::string>& GetVectorVariableNames() { return this->VectorVariableNames; }
253 std::string GetVectorVariableName(int i);
254 const std::vector<int>& GetSelectedScalarComponents() { return this->SelectedScalarComponents; }
256 const std::vector<vtkTuple<int, 3>>& GetSelectedVectorComponents()
257 {
258 return this->SelectedVectorComponents;
259 }
261 int GetNumberOfScalarArrays() { return static_cast<int>(this->ScalarArrayNames.size()); }
262 int GetNumberOfVectorArrays() { return static_cast<int>(this->VectorArrayNames.size()); }
264
266
272 vtkSetMacro(ReplaceInvalidValues, vtkTypeBool);
273 vtkGetMacro(ReplaceInvalidValues, vtkTypeBool);
274 vtkBooleanMacro(ReplaceInvalidValues, vtkTypeBool);
275 vtkSetMacro(ReplacementValue, double);
276 vtkGetMacro(ReplacementValue, double);
278
280
285 vtkSetMacro(IgnoreMissingArrays, bool);
286 vtkGetMacro(IgnoreMissingArrays, bool);
287 vtkBooleanMacro(IgnoreMissingArrays, bool);
289
294 {
295 FunctionParser, // vtkFunctionParser
296 ExprTkFunctionParser, // vtkExprTkFunctionParser
297 NumberOfFunctionParserTypes
298 };
299
301
307 {
308 this->FunctionParserType = FunctionParserTypes::FunctionParser;
309 this->Modified();
310 }
312 {
313 this->FunctionParserType = FunctionParserTypes::ExprTkFunctionParser;
314 this->Modified();
315 }
318
324
325protected:
328
330
332
337
345 static std::string CheckValidVariableName(const char* variableName);
346
348
349 char* Function;
351 std::vector<std::string> ScalarArrayNames;
352 std::vector<std::string> VectorArrayNames;
353 std::vector<std::string> ScalarVariableNames;
354 std::vector<std::string> VectorVariableNames;
356 std::vector<int> SelectedScalarComponents;
357 std::vector<vtkTuple<int, 3>> SelectedVectorComponents;
358
362
366 std::vector<std::string> CoordinateScalarVariableNames;
367 std::vector<std::string> CoordinateVectorVariableNames;
369 std::vector<vtkTuple<int, 3>> SelectedCoordinateVectorComponents;
370
372
373private:
374 vtkArrayCalculator(const vtkArrayCalculator&) = delete;
375 void operator=(const vtkArrayCalculator&) = delete;
376
377 // Do the bulk of the work
378 template <typename TFunctionParser>
379 int ProcessDataObject(vtkDataObject* input, vtkDataObject* output);
380};
381
382VTK_ABI_NAMESPACE_END
383#endif
perform mathematical operations on data in field data arrays
FunctionParserTypes
Enum that includes the types of parsers that can be used.
void SetFunctionParserTypeToFunctionParser()
Set/Get the FunctionParser type that will be used.
const std::vector< std::string > & GetVectorArrayNames()
Methods to get information about the current variables.
void RemoveAllVariables()
Remove all the variable names and their associated array names.
const char * GetAttributeTypeAsString()
Returns a string representation of the calculator's AttributeType.
void SetAttributeTypeToVertexData()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
virtual void RemoveCoordinateVectorVariables()
Remove all the coordinate variables.
std::string GetVectorVariableName(int i)
Methods to get information about the current variables.
void SetAttributeTypeToRowData()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
const std::vector< vtkTuple< int, 3 > > & GetSelectedVectorComponents()
Methods to get information about the current variables.
void SetAttributeTypeToDefault()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
vtkSetEnumMacro(FunctionParserType, FunctionParserTypes)
Set/Get the FunctionParser type that will be used.
vtkTuple< int, 3 > GetSelectedVectorComponents(int i)
Methods to get information about the current variables.
const std::vector< std::string > & GetScalarArrayNames()
Methods to get information about the current variables.
int GetNumberOfVectorArrays()
Methods to get information about the current variables.
vtkTypeBool ReplaceInvalidValues
const std::vector< int > & GetSelectedScalarComponents()
Methods to get information about the current variables.
std::vector< std::string > VectorVariableNames
void AddScalarVariable(const char *variableName, const char *arrayName, int component=0)
Add a variable name, a corresponding array name, and which components of the array to use.
const std::vector< std::string > & GetScalarVariableNames()
Methods to get information about the current variables.
std::vector< vtkTuple< int, 3 > > SelectedVectorComponents
void SetAttributeTypeToEdgeData()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
vtkDataSet * GetDataSetOutput()
Returns the output of the filter downcast to a vtkDataSet or nullptr if the cast fails.
vtkGetEnumMacro(FunctionParserType, FunctionParserTypes)
Set/Get the FunctionParser type that will be used.
std::string GetScalarArrayName(int i)
Methods to get information about the current variables.
std::string GetScalarVariableName(int i)
Methods to get information about the current variables.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetNumberOfScalarArrays()
Methods to get information about the current variables.
std::vector< vtkTuple< int, 3 > > SelectedCoordinateVectorComponents
void AddVectorArrayName(const char *arrayName, int component0=0, int component1=1, int component2=2)
Add an array name to the list of arrays used in the function and specify which components of the arra...
void AddCoordinateScalarVariable(const char *variableName, int component=0)
Add a variable name, a corresponding array name, and which components of the array to use.
virtual void RemoveVectorVariables()
Remove all the scalar variable names and their associated array names.
static std::string CheckValidVariableName(const char *variableName)
A variable name is valid if it's sanitized or enclosed in quotes.
void SetAttributeTypeToCellData()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
std::vector< int > SelectedScalarComponents
void AddVectorVariable(const char *variableName, const char *arrayName, int component0=0, int component1=1, int component2=2)
Add a variable name, a corresponding array name, and which components of the array to use.
FunctionParserTypes FunctionParserType
const std::vector< std::string > & GetVectorVariableNames()
Methods to get information about the current variables.
std::vector< std::string > CoordinateVectorVariableNames
int GetAttributeTypeFromInput(vtkDataObject *input)
Get the attribute type for the input.
void AddCoordinateVectorVariable(const char *variableName, int component0=0, int component1=1, int component2=2)
Add a variable name, a corresponding array name, and which components of the array to use.
std::vector< std::string > ScalarVariableNames
std::vector< int > SelectedCoordinateScalarComponents
void SetFunctionParserTypeToExprTkFunctionParser()
Set/Get the FunctionParser type that will be used.
int RequestData(vtkInformation *, vtkInformationVector **, vtkInformationVector *) override
This is called within ProcessRequest when a request asks the algorithm to do its work.
std::vector< std::string > ScalarArrayNames
int GetSelectedScalarComponent(int i)
Methods to get information about the current variables.
virtual void RemoveScalarVariables()
Remove all the scalar variable names and their associated array names.
void AddScalarArrayName(const char *arrayName, int component=0)
Add an array name to the list of arrays used in the function and specify which components of the arra...
int FillInputPortInformation(int, vtkInformation *) override
Fill the input port information objects for this algorithm.
void SetAttributeTypeToPointData()
Control which AttributeType the filter operates on (point data or cell data for vtkDataSets).
~vtkArrayCalculator() override
virtual void RemoveCoordinateScalarVariables()
Remove all the coordinate variables.
std::vector< std::string > VectorArrayNames
std::string GetVectorArrayName(int i)
Methods to get information about the current variables.
std::vector< std::string > CoordinateScalarVariableNames
static vtkArrayCalculator * New()
general representation of visualization data
abstract class to specify dataset behavior
Definition vtkDataSet.h:62
a simple class to control print indentation
Definition vtkIndent.h:38
Store zero or more vtkInformation instances.
Store vtkAlgorithm input/output information.
virtual void Modified()
Update the modification time for this object.
Superclass for algorithms that produce output of the same type as input.
templated base type for containers of constant size.
Definition vtkTuple.h:27
int vtkTypeBool
Definition vtkABI.h:64