VTK  9.2.6
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 =========================================================================*/
104 #ifndef vtkArrayCalculator_h
105 #define vtkArrayCalculator_h
106 
107 #include "vtkDataObject.h" // For attribute types
108 #include "vtkFiltersCoreModule.h" // For export macro
110 #include "vtkTuple.h" // needed for vtkTuple
111 #include <vector> // needed for vector
112 
113 class vtkDataSet;
114 
115 class VTKFILTERSCORE_EXPORT vtkArrayCalculator : public vtkPassInputTypeAlgorithm
116 {
117 public:
119  void PrintSelf(ostream& os, vtkIndent indent) override;
120 
122 
124 
127  vtkSetStringMacro(Function);
128  vtkGetStringMacro(Function);
130 
132 
142  void AddScalarArrayName(const char* arrayName, int component = 0);
144  const char* arrayName, int component0 = 0, int component1 = 1, int component2 = 2);
146 
148 
154  void AddScalarVariable(const char* variableName, const char* arrayName, int component = 0);
155  void AddVectorVariable(const char* variableName, const char* arrayName, int component0 = 0,
156  int component1 = 1, int component2 = 2);
158 
160 
166  void AddCoordinateScalarVariable(const char* variableName, int component = 0);
168  const char* variableName, int component0 = 0, int component1 = 1, int component2 = 2);
170 
172 
178  vtkSetStringMacro(ResultArrayName);
179  vtkGetStringMacro(ResultArrayName);
181 
183 
187  vtkGetMacro(ResultArrayType, int);
188  vtkSetMacro(ResultArrayType, int);
190 
192 
198  vtkGetMacro(CoordinateResults, vtkTypeBool);
199  vtkSetMacro(CoordinateResults, vtkTypeBool);
200  vtkBooleanMacro(CoordinateResults, vtkTypeBool);
202 
204 
209  vtkGetMacro(ResultNormals, bool);
210  vtkSetMacro(ResultNormals, bool);
211  vtkBooleanMacro(ResultNormals, bool);
213 
215 
220  vtkGetMacro(ResultTCoords, bool);
221  vtkSetMacro(ResultTCoords, bool);
222  vtkBooleanMacro(ResultTCoords, bool);
224 
229 
230  static const int DEFAULT_ATTRIBUTE_TYPE = -1;
232 
238  vtkSetMacro(AttributeType, int);
239  vtkGetMacro(AttributeType, int);
240  void SetAttributeTypeToDefault() { this->SetAttributeType(DEFAULT_ATTRIBUTE_TYPE); }
241  void SetAttributeTypeToPointData() { this->SetAttributeType(vtkDataObject::POINT); }
242  void SetAttributeTypeToCellData() { this->SetAttributeType(vtkDataObject::CELL); }
243  void SetAttributeTypeToEdgeData() { this->SetAttributeType(vtkDataObject::EDGE); }
244  void SetAttributeTypeToVertexData() { this->SetAttributeType(vtkDataObject::VERTEX); }
245  void SetAttributeTypeToRowData() { this->SetAttributeType(vtkDataObject::ROW); }
247 
252 
256  virtual void RemoveScalarVariables();
257 
261  virtual void RemoveVectorVariables();
262 
267 
272 
274 
277  const std::vector<std::string>& GetScalarArrayNames() { return this->ScalarArrayNames; }
279  const std::vector<std::string>& GetVectorArrayNames() { return this->VectorArrayNames; }
281  const std::vector<std::string>& GetScalarVariableNames() { return this->ScalarVariableNames; }
283  const std::vector<std::string>& GetVectorVariableNames() { return this->VectorVariableNames; }
285  const std::vector<int>& GetSelectedScalarComponents() { return this->SelectedScalarComponents; }
287  const std::vector<vtkTuple<int, 3>>& GetSelectedVectorComponents()
288  {
289  return this->SelectedVectorComponents;
290  }
292  int GetNumberOfScalarArrays() { return static_cast<int>(this->ScalarArrayNames.size()); }
293  int GetNumberOfVectorArrays() { return static_cast<int>(this->VectorArrayNames.size()); }
295 
297 
303  vtkSetMacro(ReplaceInvalidValues, vtkTypeBool);
304  vtkGetMacro(ReplaceInvalidValues, vtkTypeBool);
305  vtkBooleanMacro(ReplaceInvalidValues, vtkTypeBool);
306  vtkSetMacro(ReplacementValue, double);
307  vtkGetMacro(ReplacementValue, double);
309 
311 
316  vtkSetMacro(IgnoreMissingArrays, bool);
317  vtkGetMacro(IgnoreMissingArrays, bool);
318  vtkBooleanMacro(IgnoreMissingArrays, bool);
320 
325  {
326  FunctionParser, // vtkFunctionParser
327  ExprTkFunctionParser, // vtkExprTkFunctionParser
328  NumberOfFunctionParserTypes
329  };
330 
332 
336  vtkSetEnumMacro(FunctionParserType, FunctionParserTypes);
338  {
339  this->FunctionParserType = FunctionParserTypes::FunctionParser;
340  this->Modified();
341  }
343  {
344  this->FunctionParserType = FunctionParserTypes::ExprTkFunctionParser;
345  this->Modified();
346  }
347  vtkGetEnumMacro(FunctionParserType, FunctionParserTypes);
349 
355 
356 protected:
359 
361 
363 
368 
376  static std::string CheckValidVariableName(const char* variableName);
377 
379 
380  char* Function;
382  std::vector<std::string> ScalarArrayNames;
383  std::vector<std::string> VectorArrayNames;
384  std::vector<std::string> ScalarVariableNames;
385  std::vector<std::string> VectorVariableNames;
387  std::vector<int> SelectedScalarComponents;
388  std::vector<vtkTuple<int, 3>> SelectedVectorComponents;
389 
393 
397  std::vector<std::string> CoordinateScalarVariableNames;
398  std::vector<std::string> CoordinateVectorVariableNames;
400  std::vector<vtkTuple<int, 3>> SelectedCoordinateVectorComponents;
401 
403 
404 private:
405  vtkArrayCalculator(const vtkArrayCalculator&) = delete;
406  void operator=(const vtkArrayCalculator&) = delete;
407 
408  // Do the bulk of the work
409  template <typename TFunctionParser>
410  int ProcessDataObject(vtkDataObject* input, vtkDataObject* output);
411 };
412 
413 #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
abstract class to specify dataset behavior
Definition: vtkDataSet.h:172
a simple class to control print indentation
Definition: vtkIndent.h:119
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