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
152 void SetFunction(
const char*
function);
153 vtkGetStringMacro(Function);
160 int IsScalarResult();
166 int IsVectorResult();
171 double GetScalarResult();
178 void GetVectorResult(
double result[3])
180 double* r = this->GetVectorResult();
194 void SetScalarVariableValue(
const char* variableName,
double value);
197 this->SetScalarVariableValue(variableName.c_str(),
value);
199 void SetScalarVariableValue(
int i,
double value);
206 double GetScalarVariableValue(
const char* variableName);
209 return this->GetScalarVariableValue(variableName.c_str());
211 double GetScalarVariableValue(
int i);
221 void SetVectorVariableValue(
222 const char* variableName,
double xValue,
double yValue,
double zValue);
224 const std::string& variableName,
double xValue,
double yValue,
double zValue)
226 this->SetVectorVariableValue(variableName.c_str(), xValue, yValue, zValue);
230 this->SetVectorVariableValue(variableName, values[0], values[1], values[2]);
234 this->SetVectorVariableValue(variableName.c_str(), values[0], values[1], values[2]);
236 void SetVectorVariableValue(
int i,
double xValue,
double yValue,
double zValue);
239 this->SetVectorVariableValue(i, values[0], values[1], values[2]);
247 double* GetVectorVariableValue(
const char* variableName)
VTK_SIZEHINT(3);
250 return this->GetVectorVariableValue(variableName.c_str());
254 double* r = this->GetVectorVariableValue(variableName);
261 this->GetVectorVariableValue(variableName.c_str(),
value);
266 double* r = this->GetVectorVariableValue(i);
281 int GetScalarVariableIndex(
const char*
name);
284 return this->GetScalarVariableIndex(name.c_str());
295 int GetVectorVariableIndex(
const char*
name);
298 return this->GetVectorVariableIndex(name.c_str());
304 const char* GetScalarVariableName(
int i);
309 const char* GetVectorVariableName(
int i);
317 bool GetScalarVariableNeeded(
int i);
318 bool GetScalarVariableNeeded(
const char* variableName);
321 return GetScalarVariableNeeded(variableName.c_str());
331 bool GetVectorVariableNeeded(
int i);
332 bool GetVectorVariableNeeded(
const char* variableName);
335 return this->GetVectorVariableNeeded(variableName.c_str());
342 void RemoveAllVariables();
347 void RemoveScalarVariables();
352 void RemoveVectorVariables();
363 vtkBooleanMacro(ReplaceInvalidValues,
vtkTypeBool);
364 vtkSetMacro(ReplacementValue,
double);
365 vtkGetMacro(ReplacementValue,
double);
371 void CheckExpression(
int& pos,
char** error);
376 void InvalidateFunction();
391 void CopyParseError(
int&
position,
char** error);
394 char* RemoveSpacesFrom(
const char* variableName);
395 int OperatorWithinVariable(
int idx);
397 int BuildInternalFunctionStructure();
398 void BuildInternalSubstringStructure(
int beginIndex,
int endIndex);
399 void AddInternalByte(
unsigned int newByte);
401 int IsSubstringCompletelyEnclosed(
int beginIndex,
int endIndex);
402 int FindEndOfMathFunction(
int beginIndex);
403 int FindEndOfMathConstant(
int beginIndex);
405 int IsVariableName(
int currentIndex);
406 int IsElementaryOperator(
int op);
408 int GetMathFunctionNumber(
int currentIndex);
409 int GetMathFunctionNumberByCheckingParenthesis(
int currentIndex);
410 int GetMathFunctionStringLength(
int mathFunctionNumber);
411 int GetMathConstantNumber(
int currentIndex);
412 int GetMathConstantStringLength(
int mathConstantNumber);
413 unsigned char GetElementaryOperatorNumber(
char op);
414 unsigned int GetOperandNumber(
int currentIndex);
415 int GetVariableNameLength(
int variableNumber);
417 int DisambiguateOperators();
423 void UpdateNeededVariables();
425 vtkSetStringMacro(ParseError);
427 int FindPositionInOriginalFunction(
const int& pos);
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.