48 #ifndef vtkFunctionParser_h 49 #define vtkFunctionParser_h 54 #define VTK_PARSER_IMMEDIATE 1 55 #define VTK_PARSER_UNARY_MINUS 2 58 #define VTK_PARSER_ADD 3 59 #define VTK_PARSER_SUBTRACT 4 60 #define VTK_PARSER_MULTIPLY 5 61 #define VTK_PARSER_DIVIDE 6 62 #define VTK_PARSER_POWER 7 63 #define VTK_PARSER_ABSOLUTE_VALUE 8 64 #define VTK_PARSER_EXPONENT 9 65 #define VTK_PARSER_CEILING 10 66 #define VTK_PARSER_FLOOR 11 67 #define VTK_PARSER_LOGARITHM 12 68 #define VTK_PARSER_LOGARITHME 13 69 #define VTK_PARSER_LOGARITHM10 14 70 #define VTK_PARSER_SQUARE_ROOT 15 71 #define VTK_PARSER_SINE 16 72 #define VTK_PARSER_COSINE 17 73 #define VTK_PARSER_TANGENT 18 74 #define VTK_PARSER_ARCSINE 19 75 #define VTK_PARSER_ARCCOSINE 20 76 #define VTK_PARSER_ARCTANGENT 21 77 #define VTK_PARSER_HYPERBOLIC_SINE 22 78 #define VTK_PARSER_HYPERBOLIC_COSINE 23 79 #define VTK_PARSER_HYPERBOLIC_TANGENT 24 80 #define VTK_PARSER_MIN 25 81 #define VTK_PARSER_MAX 26 82 #define VTK_PARSER_SIGN 28 85 #define VTK_PARSER_CROSS 27 86 #define VTK_PARSER_VECTOR_UNARY_MINUS 29 87 #define VTK_PARSER_DOT_PRODUCT 30 88 #define VTK_PARSER_VECTOR_ADD 31 89 #define VTK_PARSER_VECTOR_SUBTRACT 32 90 #define VTK_PARSER_SCALAR_TIMES_VECTOR 33 91 #define VTK_PARSER_VECTOR_TIMES_SCALAR 34 92 #define VTK_PARSER_VECTOR_OVER_SCALAR 35 93 #define VTK_PARSER_MAGNITUDE 36 94 #define VTK_PARSER_NORMALIZE 37 97 #define VTK_PARSER_IHAT 38 98 #define VTK_PARSER_JHAT 39 99 #define VTK_PARSER_KHAT 40 102 #define VTK_PARSER_IF 41 105 #define VTK_PARSER_VECTOR_IF 42 108 #define VTK_PARSER_LESS_THAN 43 111 #define VTK_PARSER_GREATER_THAN 44 114 #define VTK_PARSER_EQUAL_TO 45 117 #define VTK_PARSER_AND 46 120 #define VTK_PARSER_OR 47 125 #define VTK_PARSER_BEGIN_VARIABLES 48 128 #define VTK_PARSER_ERROR_RESULT VTK_FLOAT_MAX 142 void SetFunction(
const char *
function);
148 int IsScalarResult();
152 int IsVectorResult();
155 double GetScalarResult();
159 double* GetVectorResult();
161 double *
r = this->GetVectorResult();
162 result[0] = r[0]; result[1] = r[1]; result[2] = r[2]; };
170 void SetScalarVariableValue(
const char* variableName,
double value);
171 void SetScalarVariableValue(
int i,
double value);
176 double GetScalarVariableValue(
const char* variableName);
177 double GetScalarVariableValue(
int i);
185 void SetVectorVariableValue(
const char* variableName,
double xValue,
186 double yValue,
double zValue);
189 this->SetVectorVariableValue(variableName,values[0],values[1],values[2]);};
190 void SetVectorVariableValue(
int i,
double xValue,
double yValue,
193 this->SetVectorVariableValue(i,values[0],values[1],values[2]);};
198 double* GetVectorVariableValue(
const char* variableName);
200 double *
r = this->GetVectorVariableValue(variableName);
201 value[0] = r[0]; value[1] = r[1]; value[2] = r[2]; };
202 double* GetVectorVariableValue(
int i);
204 double *
r = this->GetVectorVariableValue(i);
205 value[0] = r[0]; value[1] = r[1]; value[2] = r[2]; };
219 char* GetScalarVariableName(
int i);
222 char* GetVectorVariableName(
int i);
225 void RemoveAllVariables();
228 void RemoveScalarVariables();
231 void RemoveVectorVariables();
246 void CheckExpression(
int &pos,
char **error);
249 void InvalidateFunction();
262 void CopyParseError(
int &
position,
char **error);
265 char* RemoveSpacesFrom(
const char* variableName);
266 int OperatorWithinVariable(
int idx);
268 int BuildInternalFunctionStructure();
269 void BuildInternalSubstringStructure(
int beginIndex,
int endIndex);
270 void AddInternalByte(
unsigned char newByte);
272 int IsSubstringCompletelyEnclosed(
int beginIndex,
int endIndex);
273 int FindEndOfMathFunction(
int beginIndex);
274 int FindEndOfMathConstant(
int beginIndex);
276 int IsVariableName(
int currentIndex);
277 int IsElementaryOperator(
int op);
279 int GetMathFunctionNumber(
int currentIndex);
280 int GetMathFunctionNumberByCheckingParenthesis(
int currentIndex );
281 int GetMathFunctionStringLength(
int mathFunctionNumber);
282 int GetMathConstantNumber(
int currentIndex);
283 int GetMathConstantStringLength(
int mathConstantNumber);
284 unsigned char GetElementaryOperatorNumber(
char op);
285 unsigned char GetOperandNumber(
int currentIndex);
286 int GetVariableNameLength(
int variableNumber);
288 int DisambiguateOperators();
292 int FindPositionInOriginalFunction(
const int& pos);
vtkTimeStamp VariableMTime
void SetVectorVariableValue(int i, const double values[3])
abstract base class for most VTK objects
#define vtkGetMacro(name, type)
#define VTKCOMMONMISC_EXPORT
record modification and/or execution time
void SetVectorVariableValue(const char *variableName, const double values[3])
GLsizei const GLfloat * value
#define vtkSetStringMacro(name)
GLdouble GLdouble GLdouble r
char ** ScalarVariableNames
#define vtkTypeMacro(thisClass, superclass)
double * ScalarVariableValues
virtual void PrintSelf(ostream &os, vtkIndent indent)
vtkTimeStamp FunctionMTime
Parse and evaluate a mathematical expression.
virtual unsigned long GetMTime()
a simple class to control print indentation
GLboolean GLenum GLenum GLvoid * values
void GetVectorVariableValue(const char *variableName, double value[3])
int NumberOfScalarVariables
char * FunctionWithSpaces
#define vtkGetStringMacro(name)
vtkTimeStamp EvaluateMTime
double ** VectorVariableValues
void GetVectorResult(double result[3])
void GetVectorVariableValue(int i, double value[3])
#define vtkBooleanMacro(name, type)
int NumberOfVectorVariables
char ** VectorVariableNames
#define vtkSetMacro(name, type)