37 #ifndef vtkFunctionParser_h
38 #define vtkFunctionParser_h
40 #include "vtkCommonMiscModule.h"
46 #define VTK_PARSER_IMMEDIATE 1
47 #define VTK_PARSER_UNARY_MINUS 2
48 #define VTK_PARSER_UNARY_PLUS 3
51 #define VTK_PARSER_ADD 4
52 #define VTK_PARSER_SUBTRACT 5
53 #define VTK_PARSER_MULTIPLY 6
54 #define VTK_PARSER_DIVIDE 7
55 #define VTK_PARSER_POWER 8
56 #define VTK_PARSER_ABSOLUTE_VALUE 9
57 #define VTK_PARSER_EXPONENT 10
58 #define VTK_PARSER_CEILING 11
59 #define VTK_PARSER_FLOOR 12
60 #define VTK_PARSER_LOGARITHM 13
61 #define VTK_PARSER_LOGARITHME 14
62 #define VTK_PARSER_LOGARITHM10 15
63 #define VTK_PARSER_SQUARE_ROOT 16
64 #define VTK_PARSER_SINE 17
65 #define VTK_PARSER_COSINE 18
66 #define VTK_PARSER_TANGENT 19
67 #define VTK_PARSER_ARCSINE 20
68 #define VTK_PARSER_ARCCOSINE 21
69 #define VTK_PARSER_ARCTANGENT 22
70 #define VTK_PARSER_HYPERBOLIC_SINE 23
71 #define VTK_PARSER_HYPERBOLIC_COSINE 24
72 #define VTK_PARSER_HYPERBOLIC_TANGENT 25
73 #define VTK_PARSER_MIN 26
74 #define VTK_PARSER_MAX 27
75 #define VTK_PARSER_SIGN 29
78 #define VTK_PARSER_CROSS 28
79 #define VTK_PARSER_VECTOR_UNARY_MINUS 30
80 #define VTK_PARSER_VECTOR_UNARY_PLUS 31
81 #define VTK_PARSER_DOT_PRODUCT 32
82 #define VTK_PARSER_VECTOR_ADD 33
83 #define VTK_PARSER_VECTOR_SUBTRACT 34
84 #define VTK_PARSER_SCALAR_TIMES_VECTOR 35
85 #define VTK_PARSER_VECTOR_TIMES_SCALAR 36
86 #define VTK_PARSER_VECTOR_OVER_SCALAR 37
87 #define VTK_PARSER_MAGNITUDE 38
88 #define VTK_PARSER_NORMALIZE 39
91 #define VTK_PARSER_IHAT 40
92 #define VTK_PARSER_JHAT 41
93 #define VTK_PARSER_KHAT 42
96 #define VTK_PARSER_IF 43
99 #define VTK_PARSER_VECTOR_IF 44
102 #define VTK_PARSER_LESS_THAN 45
105 #define VTK_PARSER_GREATER_THAN 46
108 #define VTK_PARSER_EQUAL_TO 47
111 #define VTK_PARSER_AND 48
114 #define VTK_PARSER_OR 49
119 #define VTK_PARSER_BEGIN_VARIABLES 50
122 #define VTK_PARSER_ERROR_RESULT VTK_FLOAT_MAX
124 VTK_ABI_NAMESPACE_BEGIN
141 void SetFunction(
const char*
function);
142 vtkGetStringMacro(Function);
149 int IsScalarResult();
155 int IsVectorResult();
160 double GetScalarResult();
167 void GetVectorResult(
double result[3])
169 double* r = this->GetVectorResult();
183 void SetScalarVariableValue(
const char* variableName,
double value);
186 this->SetScalarVariableValue(variableName.c_str(),
value);
188 void SetScalarVariableValue(
int i,
double value);
195 double GetScalarVariableValue(
const char* variableName);
198 return this->GetScalarVariableValue(variableName.c_str());
200 double GetScalarVariableValue(
int i);
210 void SetVectorVariableValue(
211 const char* variableName,
double xValue,
double yValue,
double zValue);
213 const std::string& variableName,
double xValue,
double yValue,
double zValue)
215 this->SetVectorVariableValue(variableName.c_str(), xValue, yValue, zValue);
219 this->SetVectorVariableValue(variableName, values[0], values[1], values[2]);
223 this->SetVectorVariableValue(variableName.c_str(), values[0], values[1], values[2]);
225 void SetVectorVariableValue(
int i,
double xValue,
double yValue,
double zValue);
228 this->SetVectorVariableValue(i, values[0], values[1], values[2]);
236 double* GetVectorVariableValue(
const char* variableName)
VTK_SIZEHINT(3);
239 return this->GetVectorVariableValue(variableName.c_str());
243 double* r = this->GetVectorVariableValue(variableName);
250 this->GetVectorVariableValue(variableName.c_str(),
value);
255 double* r = this->GetVectorVariableValue(i);
270 int GetScalarVariableIndex(
const char*
name);
273 return this->GetScalarVariableIndex(name.c_str());
284 int GetVectorVariableIndex(
const char*
name);
287 return this->GetVectorVariableIndex(name.c_str());
293 const char* GetScalarVariableName(
int i);
298 const char* GetVectorVariableName(
int i);
306 bool GetScalarVariableNeeded(
int i);
307 bool GetScalarVariableNeeded(
const char* variableName);
310 return GetScalarVariableNeeded(variableName.c_str());
320 bool GetVectorVariableNeeded(
int i);
321 bool GetVectorVariableNeeded(
const char* variableName);
324 return this->GetVectorVariableNeeded(variableName.c_str());
331 void RemoveAllVariables();
336 void RemoveScalarVariables();
341 void RemoveVectorVariables();
352 vtkBooleanMacro(ReplaceInvalidValues,
vtkTypeBool);
353 vtkSetMacro(ReplacementValue,
double);
354 vtkGetMacro(ReplacementValue,
double);
360 void CheckExpression(
int& pos,
char** error);
365 void InvalidateFunction();
380 void CopyParseError(
int&
position,
char** error);
383 char* RemoveSpacesFrom(
const char* variableName);
384 int OperatorWithinVariable(
int idx);
386 int BuildInternalFunctionStructure();
387 void BuildInternalSubstringStructure(
int beginIndex,
int endIndex);
388 void AddInternalByte(
unsigned int newByte);
390 int IsSubstringCompletelyEnclosed(
int beginIndex,
int endIndex);
391 int FindEndOfMathFunction(
int beginIndex);
392 int FindEndOfMathConstant(
int beginIndex);
394 int IsVariableName(
int currentIndex);
395 int IsElementaryOperator(
int op);
397 int GetMathFunctionNumber(
int currentIndex);
398 int GetMathFunctionNumberByCheckingParenthesis(
int currentIndex);
399 int GetMathFunctionStringLength(
int mathFunctionNumber);
400 int GetMathConstantNumber(
int currentIndex);
401 int GetMathConstantStringLength(
int mathConstantNumber);
402 unsigned char GetElementaryOperatorNumber(
char op);
403 unsigned int GetOperandNumber(
int currentIndex);
404 int GetVariableNameLength(
int variableNumber);
406 int DisambiguateOperators();
412 void UpdateNeededVariables();
414 vtkSetStringMacro(ParseError);
416 int FindPositionInOriginalFunction(
const int& pos);
452 VTK_ABI_NAMESPACE_END
void SetVectorVariableValue(int i, const double values[3])
Set the value of a vector variable.
vtkTypeBool ReplaceInvalidValues
void SetVectorVariableValue(const std::string &variableName, double xValue, double yValue, double zValue)
Set the value of a vector variable.
abstract base class for most VTK objects
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTypeUInt32 vtkMTimeType
record modification and/or execution time
int GetVectorVariableIndex(const std::string &name)
std::vector< double > ScalarVariableValues
void SetVectorVariableValue(const char *variableName, const double values[3])
Set the value of a vector variable.
double GetScalarVariableValue(const std::string &variableName)
Get the value of a scalar variable.
bool GetVectorVariableNeeded(const std::string &variableName)
Returns whether a vector variable is needed for the function evaluation.
double * GetVectorVariableValue(const std::string &variableName)
Get the value of a vector variable.
vtkTimeStamp FunctionMTime
Parse and evaluate a mathematical expression.
a simple class to control print indentation
void GetVectorVariableValue(const char *variableName, double value[3])
Get the value of a vector variable.
std::vector< vtkTuple< double, 3 > > VectorVariableValues
virtual vtkMTimeType GetMTime()
Return this object's modified time.
char * FunctionWithSpaces
void SetVectorVariableValue(const std::string &variableName, const double values[3])
Set the value of a vector variable.
std::vector< bool > VectorVariableNeeded
std::vector< unsigned int > ByteCode
std::vector< std::string > VectorVariableNames
#define VTK_SIZEHINT(...)
std::vector< std::string > ScalarVariableNames
void GetVectorVariableValue(const std::string &variableName, double value[3])
Get the value of a vector variable.
void GetVectorVariableValue(int i, double value[3])
Get the value of a vector variable.
int GetScalarVariableIndex(const std::string &name)
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
bool GetScalarVariableNeeded(const std::string &variableName)
Returns whether a scalar variable is needed for the function evaluation.
std::vector< bool > ScalarVariableNeeded
int GetNumberOfScalarVariables()
Get the number of scalar variables.
void SetScalarVariableValue(const std::string &variableName, double value)
Set the value of a scalar variable.
int GetNumberOfVectorVariables()
Get the number of vector variables.