Vuo 2.4.4
Loading...
Searching...
No Matches
VuoPointsParametric.cc
Go to the documentation of this file.
1
10#include "VuoPointsParametric.h"
12#include <muParser/muParser.h>
13
14extern "C"
15{
16#ifdef VUO_COMPILER
18 "title" : "VuoPointsParametric",
19 "dependencies" : [
20 "VuoInteger",
21 "VuoPoint3d",
22 "VuoReal",
23 "VuoText",
24 "VuoList_VuoPoint3d",
25 "VuoMathExpressionParser",
26 "muparser"
27 ]
28 });
29#endif
30}
31
36 VuoReal time,
37 VuoText xExp,
38 VuoText yExp,
39 VuoText zExp,
40 VuoInteger subdivisions,
41 VuoReal uMin,
42 VuoReal uMax)
43{
44 if (subdivisions <= 0 || VuoText_isEmpty(xExp) || VuoText_isEmpty(yExp) || VuoText_isEmpty(zExp))
46
47 mu::Parser xParser, yParser, zParser;
48
49 xParser.SetExpr(xExp);
50 yParser.SetExpr(yExp);
51 zParser.SetExpr(zExp);
52
53 mu::value_type uVar = 0;
54
55 xParser.DefineVar("u", &uVar); xParser.DefineVar("U", &uVar);
56 yParser.DefineVar("u", &uVar); yParser.DefineVar("U", &uVar);
57 zParser.DefineVar("u", &uVar); zParser.DefineVar("U", &uVar);
58
59 mu::value_type iVar = 0;
60
61 xParser.DefineVar("i", &iVar); xParser.DefineVar("I", &iVar);
62 yParser.DefineVar("i", &iVar); yParser.DefineVar("I", &iVar);
63 zParser.DefineVar("i", &iVar); zParser.DefineVar("I", &iVar);
64
65 xParser.DefineConst("time", (double)time); xParser.DefineConst("Time", (double)time); xParser.DefineConst("TIME", (double)time);
66 yParser.DefineConst("time", (double)time); yParser.DefineConst("Time", (double)time); yParser.DefineConst("TIME", (double)time);
67 zParser.DefineConst("time", (double)time); zParser.DefineConst("Time", (double)time); zParser.DefineConst("TIME", (double)time);
68
72
73 VuoList_VuoPoint3d points = VuoListCreateWithCount_VuoPoint3d(subdivisions, (VuoPoint3d){0,0,0});
74 VuoPoint3d *pointsArray = VuoListGetData_VuoPoint3d(points);
75
76 try
77 {
78 for(int x = 0; x < subdivisions; x++)
79 {
80 if (subdivisions > 1)
81 uVar = VuoReal_lerp(uMin, uMax, x/(float)(subdivisions-1.));
82 else
83 uVar = (uMin + uMax)/2.;
84
85 iVar = x + 1;
86
87 pointsArray[x] = (VuoPoint3d){
88 (float)xParser.Eval(),
89 (float)yParser.Eval(),
90 (float)zParser.Eval()};
91 }
92 }
93 catch (mu::Parser::exception_type &e)
94 {
95 VUserLog("Error: %s", e.GetMsg().c_str());
96 }
97 return points;
98}
99
104 VuoReal time,
105 VuoText xExp,
106 VuoText yExp,
107 VuoText zExp,
108 VuoInteger rows,
109 VuoInteger columns,
110 VuoReal uMin,
111 VuoReal uMax,
112 VuoReal vMin,
113 VuoReal vMax)
114{
115 if (rows <= 0 || columns <= 0 || VuoText_isEmpty(xExp) || VuoText_isEmpty(yExp) || VuoText_isEmpty(zExp))
117
118 mu::Parser xParser, yParser, zParser;
119
120 xParser.SetExpr(xExp);
121 yParser.SetExpr(yExp);
122 zParser.SetExpr(zExp);
123
124 mu::value_type uVar = 0;
125 mu::value_type vVar = 0;
126
127 xParser.DefineVar("u", &uVar); xParser.DefineVar("U", &uVar);
128 yParser.DefineVar("u", &uVar); yParser.DefineVar("U", &uVar);
129 zParser.DefineVar("u", &uVar); zParser.DefineVar("U", &uVar);
130 xParser.DefineVar("v", &vVar); xParser.DefineVar("V", &vVar);
131 yParser.DefineVar("v", &vVar); yParser.DefineVar("V", &vVar);
132 zParser.DefineVar("v", &vVar); zParser.DefineVar("V", &vVar);
133
134 mu::value_type iVar = 0;
135 mu::value_type jVar = 0;
136
137 xParser.DefineVar("i", &iVar); xParser.DefineVar("I", &iVar);
138 yParser.DefineVar("i", &iVar); yParser.DefineVar("I", &iVar);
139 zParser.DefineVar("i", &iVar); zParser.DefineVar("I", &iVar);
140 xParser.DefineVar("j", &jVar); xParser.DefineVar("J", &jVar);
141 yParser.DefineVar("j", &jVar); yParser.DefineVar("J", &jVar);
142 zParser.DefineVar("j", &jVar); zParser.DefineVar("J", &jVar);
143
144 xParser.DefineConst("time", (double)time); xParser.DefineConst("Time", (double)time); xParser.DefineConst("TIME", (double)time);
145 yParser.DefineConst("time", (double)time); yParser.DefineConst("Time", (double)time); yParser.DefineConst("TIME", (double)time);
146 zParser.DefineConst("time", (double)time); zParser.DefineConst("Time", (double)time); zParser.DefineConst("TIME", (double)time);
147
151
152 VuoList_VuoPoint3d points = VuoListCreateWithCount_VuoPoint3d(rows*columns, (VuoPoint3d){0,0,0});
153 VuoPoint3d *pointsArray = VuoListGetData_VuoPoint3d(points);
154
155 try
156 {
157 for(int y = 0; y < rows; y++)
158 {
159 if (rows > 1)
160 vVar = VuoReal_lerp(vMin, vMax, y/(float)(rows-1));
161 else
162 vVar = (vMin + vMax)/2.;
163
164 for(int x = 0; x < columns; x++)
165 {
166 if (columns > 1)
167 uVar = VuoReal_lerp(uMin, uMax, x/(float)(columns-1.));
168 else
169 uVar = (uMin + uMax)/2.;
170
171 iVar = x + 1;
172 jVar = y + 1;
173
174 pointsArray[y*columns + x] = (VuoPoint3d){
175 (float)xParser.Eval(),
176 (float)yParser.Eval(),
177 (float)zParser.Eval()};
178 }
179 }
180 }
181 catch (mu::Parser::exception_type &e)
182 {
183 VUserLog("Error: %s", e.GetMsg().c_str());
184 }
185 return points;
186}