VTK  9.1.0
vtkArrayCalculator.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkArrayCalculator.h
5
6 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7 All rights reserved.
8 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
101#ifndef vtkArrayCalculator_h
102#define vtkArrayCalculator_h
103
104#include "vtkDataObject.h" // For attribute types
105#include "vtkFiltersCoreModule.h" // For export macro
107#include "vtkTuple.h" // needed for vtkTuple
108#include <vector> // needed for vector
109
110class vtkDataSet;
111
112class VTKFILTERSCORE_EXPORT vtkArrayCalculator : public vtkPassInputTypeAlgorithm
113{
114public:
116 void PrintSelf(ostream& os, vtkIndent indent) override;
117
119
121
124 vtkSetStringMacro(Function);
125 vtkGetStringMacro(Function);
127
129
139 void AddScalarArrayName(const char* arrayName, int component = 0);
141 const char* arrayName, int component0 = 0, int component1 = 1, int component2 = 2);
143
145
151 void AddScalarVariable(const char* variableName, const char* arrayName, int component = 0);
152 void AddVectorVariable(const char* variableName, const char* arrayName, int component0 = 0,
153 int component1 = 1, int component2 = 2);
155
157
163 void AddCoordinateScalarVariable(const char* variableName, int component = 0);
165 const char* variableName, int component0 = 0, int component1 = 1, int component2 = 2);
167
169
175 vtkSetStringMacro(ResultArrayName);
176 vtkGetStringMacro(ResultArrayName);
178
180
184 vtkGetMacro(ResultArrayType, int);
185 vtkSetMacro(ResultArrayType, int);
187
189
195 vtkGetMacro(CoordinateResults, vtkTypeBool);
196 vtkSetMacro(CoordinateResults, vtkTypeBool);
197 vtkBooleanMacro(CoordinateResults, vtkTypeBool);
199
201
206 vtkGetMacro(ResultNormals, bool);
207 vtkSetMacro(ResultNormals, bool);
208 vtkBooleanMacro(ResultNormals, bool);
210
212
217 vtkGetMacro(ResultTCoords, bool);
218 vtkSetMacro(ResultTCoords, bool);
219 vtkBooleanMacro(ResultTCoords, bool);
221
226
227 static const int DEFAULT_ATTRIBUTE_TYPE = -1;
229
235 vtkSetMacro(AttributeType, int);
236 vtkGetMacro(AttributeType, int);
237 void SetAttributeTypeToDefault() { this->SetAttributeType(DEFAULT_ATTRIBUTE_TYPE); }
238 void SetAttributeTypeToPointData() { this->SetAttributeType(vtkDataObject::POINT); }
239 void SetAttributeTypeToCellData() { this->SetAttributeType(vtkDataObject::CELL); }
240 void SetAttributeTypeToEdgeData() { this->SetAttributeType(vtkDataObject::EDGE); }
241 void SetAttributeTypeToVertexData() { this->SetAttributeType(vtkDataObject::VERTEX); }
242 void SetAttributeTypeToRowData() { this->SetAttributeType(vtkDataObject::ROW); }
244
249
253 virtual void RemoveScalarVariables();
254
258 virtual void RemoveVectorVariables();
259
264
269
271
274 const std::vector<std::string>& GetScalarArrayNames() { return this->ScalarArrayNames; }
276 const std::vector<std::string>& GetVectorArrayNames() { return this->VectorArrayNames; }
278 const std::vector<std::string>& GetScalarVariableNames() { return this->ScalarVariableNames; }
280 const std::vector<std::string>& GetVectorVariableNames() { return this->VectorVariableNames; }
282 const std::vector<int>& GetSelectedScalarComponents() { return this->SelectedScalarComponents; }
284 const std::vector<vtkTuple<int, 3>>& GetSelectedVectorComponents()
285 {
286 return this->SelectedVectorComponents;
287 }
289 int GetNumberOfScalarArrays() { return static_cast<int>(this->ScalarArrayNames.size()); }
290 int GetNumberOfVectorArrays() { return static_cast<int>(this->VectorArrayNames.size()); }
292
294
300 vtkSetMacro(ReplaceInvalidValues, vtkTypeBool);
301 vtkGetMacro(ReplaceInvalidValues, vtkTypeBool);
302 vtkBooleanMacro(ReplaceInvalidValues, vtkTypeBool);
303 vtkSetMacro(ReplacementValue, double);
304 vtkGetMacro(ReplacementValue, double);
306
308
313 vtkSetMacro(IgnoreMissingArrays, bool);
314 vtkGetMacro(IgnoreMissingArrays, bool);
315 vtkBooleanMacro(IgnoreMissingArrays, bool);
317
322 {
323 FunctionParser, // vtkFunctionParser
324 ExprTkFunctionParser, // vtkExprTkFunctionParser
325 NumberOfFunctionParserTypes
326 };
327
329
335 {
336 this->FunctionParserType = FunctionParserTypes::FunctionParser;
337 this->Modified();
338 }
340 {
341 this->FunctionParserType = FunctionParserTypes::ExprTkFunctionParser;
342 this->Modified();
343 }
346
352
353protected:
356
358
360
365
373 static std::string CheckValidVariableName(const char* variableName);
374
376
377 char* Function;
379 std::vector<std::string> ScalarArrayNames;
380 std::vector<std::string> VectorArrayNames;
381 std::vector<std::string> ScalarVariableNames;
382 std::vector<std::string> VectorVariableNames;
384 std::vector<int> SelectedScalarComponents;
385 std::vector<vtkTuple<int, 3>> SelectedVectorComponents;
386
390
394 std::vector<std::string> CoordinateScalarVariableNames;
395 std::vector<std::string> CoordinateVectorVariableNames;
397 std::vector<vtkTuple<int, 3>> SelectedCoordinateVectorComponents;
398
400
401private:
402 vtkArrayCalculator(const vtkArrayCalculator&) = delete;
403 void operator=(const vtkArrayCalculator&) = delete;
404
405 // Do the bulk of the work
406 template <typename TFunctionParser>
407 int ProcessDataObject(vtkDataObject* input, vtkDataObject* output);
408};
409
410#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.
vtkTypeBool CoordinateResults
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:166
a simple class to control print indentation
Definition: vtkIndent.h:113
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.
@ component
Definition: vtkX3D.h:181
@ string
Definition: vtkX3D.h:496
int vtkTypeBool
Definition: vtkABI.h:69