00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef _GrapherExpr_
00011 #define _GrapherExpr_
00012 #include <SeExpression.h>
00013
00015 struct SimpleVar:public SeExprScalarVarRef
00016 {
00017 double val;
00018 void eval(const SeExprVarNode* ,SeVec3d& result)
00019 {result[0]=val;}
00020 };
00021
00022
00024 class GrapherExpr:public SeExpression
00025 {
00026 const std::map<std::string,SimpleVar>& vars;
00027 public:
00029 GrapherExpr(const std::string& expr,const std::map<std::string,SimpleVar>& vars)
00030 :SeExpression(expr),vars(vars)
00031 {}
00032
00034 void setX(double x_input)
00035 {x.val=x_input;}
00036
00037 private:
00039 mutable SimpleVar x;
00040
00042 SeExprVarRef* resolveVar(const std::string& name) const
00043 {
00044
00045 if(name == "x") return &x;
00046
00047 std::map<std::string,SimpleVar>::const_iterator i=vars.find(name);
00048 if(i!=vars.end()) return const_cast<SimpleVar*>(&i->second);
00049
00050 return 0;
00051 }
00052 };
00053 #endif