12 #include <muParser/muParser.h>
20 "title" :
"VuoPointsParametric",
27 "VuoMathExpressionParser",
46 if (subdivisions <= 0 || !xExp || !yExp || !zExp)
49 mu::Parser xParser, yParser, zParser;
51 xParser.SetExpr(xExp);
52 yParser.SetExpr(yExp);
53 zParser.SetExpr(zExp);
55 mu::value_type uVar = 0;
57 xParser.DefineVar(
"u", &uVar); xParser.DefineVar(
"U", &uVar);
58 yParser.DefineVar(
"u", &uVar); yParser.DefineVar(
"U", &uVar);
59 zParser.DefineVar(
"u", &uVar); zParser.DefineVar(
"U", &uVar);
61 mu::value_type iVar = 0;
63 xParser.DefineVar(
"i", &iVar); xParser.DefineVar(
"I", &iVar);
64 yParser.DefineVar(
"i", &iVar); yParser.DefineVar(
"I", &iVar);
65 zParser.DefineVar(
"i", &iVar); zParser.DefineVar(
"I", &iVar);
67 xParser.DefineConst(
"time", (
double)time); xParser.DefineConst(
"Time", (
double)time); xParser.DefineConst(
"TIME", (
double)time);
68 yParser.DefineConst(
"time", (
double)time); yParser.DefineConst(
"Time", (
double)time); yParser.DefineConst(
"TIME", (
double)time);
69 zParser.DefineConst(
"time", (
double)time); zParser.DefineConst(
"Time", (
double)time); zParser.DefineConst(
"TIME", (
double)time);
80 for(
int x = 0; x < subdivisions; x++)
83 uVar =
VuoReal_lerp(uMin, uMax, x/(
float)(subdivisions-1.));
85 uVar = (uMin + uMax)/2.;
89 pointsArray[x] = (VuoPoint3d){
90 (float)xParser.Eval(),
91 (float)yParser.Eval(),
92 (float)zParser.Eval()};
95 catch (mu::Parser::exception_type &e)
97 VUserLog(
"Error: %s", e.GetMsg().c_str());
117 if (rows <= 0 || columns <= 0 || !xExp || !yExp || !zExp)
120 mu::Parser xParser, yParser, zParser;
122 xParser.SetExpr(xExp);
123 yParser.SetExpr(yExp);
124 zParser.SetExpr(zExp);
126 mu::value_type uVar = 0;
127 mu::value_type vVar = 0;
129 xParser.DefineVar(
"u", &uVar); xParser.DefineVar(
"U", &uVar);
130 yParser.DefineVar(
"u", &uVar); yParser.DefineVar(
"U", &uVar);
131 zParser.DefineVar(
"u", &uVar); zParser.DefineVar(
"U", &uVar);
132 xParser.DefineVar(
"v", &vVar); xParser.DefineVar(
"V", &vVar);
133 yParser.DefineVar(
"v", &vVar); yParser.DefineVar(
"V", &vVar);
134 zParser.DefineVar(
"v", &vVar); zParser.DefineVar(
"V", &vVar);
136 mu::value_type iVar = 0;
137 mu::value_type jVar = 0;
139 xParser.DefineVar(
"i", &iVar); xParser.DefineVar(
"I", &iVar);
140 yParser.DefineVar(
"i", &iVar); yParser.DefineVar(
"I", &iVar);
141 zParser.DefineVar(
"i", &iVar); zParser.DefineVar(
"I", &iVar);
142 xParser.DefineVar(
"j", &jVar); xParser.DefineVar(
"J", &jVar);
143 yParser.DefineVar(
"j", &jVar); yParser.DefineVar(
"J", &jVar);
144 zParser.DefineVar(
"j", &jVar); zParser.DefineVar(
"J", &jVar);
146 xParser.DefineConst(
"time", (
double)time); xParser.DefineConst(
"Time", (
double)time); xParser.DefineConst(
"TIME", (
double)time);
147 yParser.DefineConst(
"time", (
double)time); yParser.DefineConst(
"Time", (
double)time); yParser.DefineConst(
"TIME", (
double)time);
148 zParser.DefineConst(
"time", (
double)time); zParser.DefineConst(
"Time", (
double)time); zParser.DefineConst(
"TIME", (
double)time);
159 for(
int y = 0; y < rows; y++)
164 vVar = (vMin + vMax)/2.;
166 for(
int x = 0; x < columns; x++)
171 uVar = (uMin + uMax)/2.;
176 pointsArray[y*columns + x] = (VuoPoint3d){
177 (float)xParser.Eval(),
178 (float)yParser.Eval(),
179 (float)zParser.Eval()};
183 catch (mu::Parser::exception_type &e)
185 VUserLog(
"Error: %s", e.GetMsg().c_str());