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);
160 int IsScalarResult();
166 int IsVectorResult();
171 double GetScalarResult();
177 double* GetVectorResult();
178 void GetVectorResult(
double result[3]) {
179 double *r = this->GetVectorResult();
180 result[0] = r[0]; result[1] = r[1]; result[2] = r[2]; };
190 void SetScalarVariableValue(
const char* variableName,
double value);
191 void SetScalarVariableValue(
int i,
double value);
198 double GetScalarVariableValue(
const char* variableName);
199 double GetScalarVariableValue(
int i);
209 void SetVectorVariableValue(
const char* variableName,
double xValue,
210 double yValue,
double zValue);
212 const double values[3]) {
213 this->SetVectorVariableValue(variableName,values[0],values[1],values[2]);};
214 void SetVectorVariableValue(
int i,
double xValue,
double yValue,
217 this->SetVectorVariableValue(i,values[0],values[1],values[2]);};
224 double* GetVectorVariableValue(
const char* variableName);
226 double *r = this->GetVectorVariableValue(variableName);
227 value[0] = r[0]; value[1] = r[1]; value[2] = r[2]; };
228 double* GetVectorVariableValue(
int i);
230 double *r = this->GetVectorVariableValue(i);
231 value[0] = r[0]; value[1] = r[1]; value[2] = r[2]; };
238 {
return static_cast<int>(this->ScalarVariableNames.size()); }
244 {
return static_cast<int>(this->VectorVariableNames.size()); }
249 const char* GetScalarVariableName(
int i);
254 const char* GetVectorVariableName(
int i);
262 bool GetScalarVariableNeeded(
int i);
263 bool GetScalarVariableNeeded(
const char* variableName);
272 bool GetVectorVariableNeeded(
int i);
273 bool GetVectorVariableNeeded(
const char* variableName);
279 void RemoveAllVariables();
284 void RemoveScalarVariables();
289 void RemoveVectorVariables();
299 vtkGetMacro(ReplaceInvalidValues,
int);
302 vtkGetMacro(ReplacementValue,
double);
308 void CheckExpression(
int &pos,
char **error);
313 void InvalidateFunction();
328 void CopyParseError(
int &
position,
char **error);
331 char* RemoveSpacesFrom(const
char* variableName);
332 int OperatorWithinVariable(
int idx);
334 int BuildInternalFunctionStructure();
335 void BuildInternalSubstringStructure(
int beginIndex,
int endIndex);
336 void AddInternalByte(
unsigned char newByte);
338 int IsSubstringCompletelyEnclosed(
int beginIndex,
int endIndex);
339 int FindEndOfMathFunction(
int beginIndex);
340 int FindEndOfMathConstant(
int beginIndex);
342 int IsVariableName(
int currentIndex);
343 int IsElementaryOperator(
int op);
345 int GetMathFunctionNumber(
int currentIndex);
346 int GetMathFunctionNumberByCheckingParenthesis(
int currentIndex );
347 int GetMathFunctionStringLength(
int mathFunctionNumber);
348 int GetMathConstantNumber(
int currentIndex);
349 int GetMathConstantStringLength(
int mathConstantNumber);
350 unsigned char GetElementaryOperatorNumber(
char op);
351 unsigned char GetOperandNumber(
int currentIndex);
352 int GetVariableNameLength(
int variableNumber);
354 int DisambiguateOperators();
360 void UpdateNeededVariables();
362 vtkSetStringMacro(ParseError);
364 int FindPositionInOriginalFunction(const
int& pos);
367 char* FunctionWithSpaces;
370 std::
vector<std::
string> ScalarVariableNames;
371 std::
vector<std::
string> VectorVariableNames;
372 std::
vector<
double> ScalarVariableValues;
377 unsigned char *ByteCode;
391 int ReplaceInvalidValues;
392 double ReplacementValue;
394 int ParseErrorPositon;
void SetVectorVariableValue(int i, const double values[3])
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.
record modification and/or execution time
void SetVectorVariableValue(const char *variableName, const double values[3])
Set the value of a vector variable.
vtkTypeUInt64 vtkMTimeType
templated base type for containers of constant size.
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.
virtual vtkMTimeType GetMTime()
Return this object's modified time.
vtkGetStringMacro(ExtensionsString)
Returns a string listing all available extensions.
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
void GetVectorVariableValue(int i, double value[3])
Get the value of a vector variable.
vtkBooleanMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
int GetNumberOfScalarVariables()
Get the number of scalar variables.
int GetNumberOfVectorVariables()
Get the number of vector variables.