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 
81 VTK_ABI_NAMESPACE_BEGIN
82 class vtkDataSet;
83 
84 class VTKFILTERSCORE_EXPORT vtkArrayCalculator : public vtkPassInputTypeAlgorithm
85 {
86 public:
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; }
248  const std::vector<std::string>& GetVectorArrayNames() { return this->VectorArrayNames; }
250  const std::vector<std::string>& GetScalarVariableNames() { return this->ScalarVariableNames; }
252  const std::vector<std::string>& GetVectorVariableNames() { return this->VectorVariableNames; }
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 
305  vtkSetEnumMacro(FunctionParserType, FunctionParserTypes);
307  {
308  this->FunctionParserType = FunctionParserTypes::FunctionParser;
309  this->Modified();
310  }
312  {
313  this->FunctionParserType = FunctionParserTypes::ExprTkFunctionParser;
314  this->Modified();
315  }
316  vtkGetEnumMacro(FunctionParserType, FunctionParserTypes);
318 
324 
325 protected:
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 
373 private:
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 
382 VTK_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.
void RemoveAllVariables()
Remove all the variable names and their associated array names.
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).
vtkTuple< int, 3 > GetSelectedVectorComponents(int i)
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.
int GetNumberOfVectorArrays()
Methods to get information about the current variables.
vtkTypeBool ReplaceInvalidValues
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
const std::vector< int > & GetSelectedScalarComponents()
Methods to get information about the current variables.
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 char * GetAttributeTypeAsString()
Returns a string representation of the calculator's AttributeType.
std::vector< std::string > CoordinateVectorVariableNames
int GetAttributeTypeFromInput(vtkDataObject *input)
Get the attribute type for the input.
const std::vector< vtkTuple< int, 3 > > & GetSelectedVectorComponents()
Methods to get information about the current variables.
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.
const std::vector< std::string > & GetVectorArrayNames()
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...
const std::vector< std::string > & GetScalarArrayNames()
Methods to get information about the current variables.
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.
const std::vector< std::string > & GetVectorVariableNames()
Methods to get information about the current 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
Definition: vtkDataObject.h:64
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.
@ component
Definition: vtkX3D.h:175
@ string
Definition: vtkX3D.h:490
int vtkTypeBool
Definition: vtkABI.h:64