Go to the documentation of this file.
49 #ifndef vtkFunctionParser_h
50 #define vtkFunctionParser_h
52 #include "vtkCommonMiscModule.h"
58 #define VTK_PARSER_IMMEDIATE 1
59 #define VTK_PARSER_UNARY_MINUS 2
60 #define VTK_PARSER_UNARY_PLUS 3
63 #define VTK_PARSER_ADD 4
64 #define VTK_PARSER_SUBTRACT 5
65 #define VTK_PARSER_MULTIPLY 6
66 #define VTK_PARSER_DIVIDE 7
67 #define VTK_PARSER_POWER 8
68 #define VTK_PARSER_ABSOLUTE_VALUE 9
69 #define VTK_PARSER_EXPONENT 10
70 #define VTK_PARSER_CEILING 11
71 #define VTK_PARSER_FLOOR 12
72 #define VTK_PARSER_LOGARITHM 13
73 #define VTK_PARSER_LOGARITHME 14
74 #define VTK_PARSER_LOGARITHM10 15
75 #define VTK_PARSER_SQUARE_ROOT 16
76 #define VTK_PARSER_SINE 17
77 #define VTK_PARSER_COSINE 18
78 #define VTK_PARSER_TANGENT 19
79 #define VTK_PARSER_ARCSINE 20
80 #define VTK_PARSER_ARCCOSINE 21
81 #define VTK_PARSER_ARCTANGENT 22
82 #define VTK_PARSER_HYPERBOLIC_SINE 23
83 #define VTK_PARSER_HYPERBOLIC_COSINE 24
84 #define VTK_PARSER_HYPERBOLIC_TANGENT 25
85 #define VTK_PARSER_MIN 26
86 #define VTK_PARSER_MAX 27
87 #define VTK_PARSER_SIGN 29
90 #define VTK_PARSER_CROSS 28
91 #define VTK_PARSER_VECTOR_UNARY_MINUS 30
92 #define VTK_PARSER_VECTOR_UNARY_PLUS 31
93 #define VTK_PARSER_DOT_PRODUCT 32
94 #define VTK_PARSER_VECTOR_ADD 33
95 #define VTK_PARSER_VECTOR_SUBTRACT 34
96 #define VTK_PARSER_SCALAR_TIMES_VECTOR 35
97 #define VTK_PARSER_VECTOR_TIMES_SCALAR 36
98 #define VTK_PARSER_VECTOR_OVER_SCALAR 37
99 #define VTK_PARSER_MAGNITUDE 38
100 #define VTK_PARSER_NORMALIZE 39
103 #define VTK_PARSER_IHAT 40
104 #define VTK_PARSER_JHAT 41
105 #define VTK_PARSER_KHAT 42
108 #define VTK_PARSER_IF 43
111 #define VTK_PARSER_VECTOR_IF 44
114 #define VTK_PARSER_LESS_THAN 45
117 #define VTK_PARSER_GREATER_THAN 46
120 #define VTK_PARSER_EQUAL_TO 47
123 #define VTK_PARSER_AND 48
126 #define VTK_PARSER_OR 49
131 #define VTK_PARSER_BEGIN_VARIABLES 50
134 #define VTK_PARSER_ERROR_RESULT VTK_FLOAT_MAX
153 vtkGetStringMacro(Function);
178 void GetVectorResult(
double result[3]) {
179 double *r = this->GetVectorResult();
180 result[0] = r[0]; result[1] = r[1]; result[2] = r[2]; };
210 double yValue,
double zValue);
212 const double values[3]) {
213 this->SetVectorVariableValue(variableName,values[0],values[1],values[2]);};
217 this->SetVectorVariableValue(i,values[0],values[1],values[2]);};
226 double *r = this->GetVectorVariableValue(variableName);
230 double *r = this->GetVectorVariableValue(i);
238 {
return static_cast<int>(this->ScalarVariableNames.size()); }
249 {
return static_cast<int>(this->VectorVariableNames.size()); }
311 vtkSetMacro(ReplacementValue,
double);
312 vtkGetMacro(ReplacementValue,
double);
372 vtkSetStringMacro(ParseError);
int GetMathConstantNumber(int currentIndex)
double GetScalarVariableValue(int i)
bool GetVectorVariableNeeded(const char *variableName)
int GetMathFunctionStringLength(int mathFunctionNumber)
double * GetVectorResult()
Get a vector result from evaluating the input function.
int IsVectorResult()
Check whether the result is a vector result.
int DisambiguateOperators()
const char * GetVectorVariableName(int i)
Get the ith vector variable name.
int IsScalarResult()
Check whether the result is a scalar result.
int GetMathConstantStringLength(int mathConstantNumber)
void SetVectorVariableValue(int i, const double values[3])
int IsElementaryOperator(int op)
record modification and/or execution time
bool Evaluate()
Evaluate the function, returning true on success, false on failure.
int GetMathFunctionNumberByCheckingParenthesis(int currentIndex)
void InvalidateFunction()
Allow the user to force the function to be re-parsed.
abstract base class for most VTK objects
void SetVectorVariableValue(int i, double xValue, double yValue, double zValue)
void UpdateNeededVariables()
Collects meta-data about which variables are needed by the current function.
bool GetScalarVariableNeeded(int i)
Returns whether a scalar variable is needed for the function evaluation.
int GetScalarVariableIndex(const char *name)
Get scalar variable index or -1 if not found.
unsigned int GetOperandNumber(int currentIndex)
void RemoveScalarVariables()
Remove all the scalar variables.
vtkTimeStamp FunctionMTime
std::vector< double > ScalarVariableValues
int IsVariableName(int currentIndex)
void SetScalarVariableValue(int i, double value)
static vtkFunctionParser * New()
bool GetScalarVariableNeeded(const char *variableName)
char * RemoveSpacesFrom(const char *variableName)
int GetVariableNameLength(int variableNumber)
std::vector< bool > VectorVariableNeeded
void SetVectorVariableValue(const char *variableName, const double values[3])
#define VTK_SIZEHINT(...)
void GetVectorVariableValue(const char *variableName, double value[3])
int OperatorWithinVariable(int idx)
std::vector< std::string > VectorVariableNames
void CheckExpression(int &pos, char **error)
Check the validity of the function expression.
vtkTimeStamp EvaluateMTime
int GetVectorVariableIndex(const char *name)
Get scalar variable index or -1 if not found.
a simple class to control print indentation
void SetScalarVariableValue(const char *variableName, double value)
Set the value of a scalar variable.
unsigned char GetElementaryOperatorNumber(char op)
void BuildInternalSubstringStructure(int beginIndex, int endIndex)
std::vector< std::string > ScalarVariableNames
bool GetVectorVariableNeeded(int i)
Returns whether a vector variable is needed for the function evaluation.
double GetScalarResult()
Get a scalar result from evaluating the input function.
double GetScalarVariableValue(const char *variableName)
Get the value of a scalar variable.
int FindPositionInOriginalFunction(const int &pos)
std::vector< vtkTuple< double, 3 > > VectorVariableValues
vtkMTimeType GetMTime() override
Return parser's MTime.
int FindEndOfMathConstant(int beginIndex)
char * FunctionWithSpaces
~vtkFunctionParser() override
void GetVectorVariableValue(int i, double value[3])
double * GetVectorVariableValue(int i)
int FindEndOfMathFunction(int beginIndex)
Parse and evaluate a mathematical expression.
const char * GetScalarVariableName(int i)
Get the ith scalar variable name.
void AddInternalByte(unsigned char newByte)
void CopyParseError(int &position, char **error)
void RemoveVectorVariables()
Remove all the vector variables.
vtkTimeStamp VariableMTime
int GetNumberOfScalarVariables()
Get the number of scalar variables.
vtkTypeBool ReplaceInvalidValues
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int GetNumberOfVectorVariables()
Get the number of vector variables.
void SetFunction(const char *function)
Set/Get input string to evaluate.
void SetVectorVariableValue(const char *variableName, double xValue, double yValue, double zValue)
Set the value of a vector variable.
double * GetVectorVariableValue(const char *variableName)
Get the value of a vector variable.
std::vector< bool > ScalarVariableNeeded
int BuildInternalFunctionStructure()
int IsSubstringCompletelyEnclosed(int beginIndex, int endIndex)
int GetMathFunctionNumber(int currentIndex)
void RemoveAllVariables()
Remove all the current variables.
vtkTypeUInt32 vtkMTimeType