15
15
16
16
#include < QDebug>
17
17
#include < QLineF>
18
+ #include < QtQml/QJSEngine>
19
+ #include < QtQml/QJSValue>
18
20
19
21
namespace Gerber {
20
22
@@ -394,6 +396,10 @@ void ApMacro::draw() {
394
396
try {
395
397
// for (int i = 0; i < modifiers_.size(); ++i) {
396
398
// QString var(modifiers_[i]);
399
+
400
+ QJSEngine js;
401
+ for (auto && [name, value]: macroCoefficients)
402
+ js.globalObject ().setProperty (name, value);
397
403
for (QString& var: modifiers_) {
398
404
if (var.at (0 ) == ' 0' ) // Skip Comment
399
405
continue ;
@@ -403,12 +409,20 @@ void ApMacro::draw() {
403
409
if (var.contains (' =' )) {
404
410
QList<QString> stringList = var.split (' =' );
405
411
stringList.last ().replace (QChar (' x' ), ' *' , Qt::CaseInsensitive);
406
- macroCoefficients[stringList.first ()] = MathParser (¯oCoefficients).parse (stringList.last ());
412
+
413
+ auto val = js.evaluate (stringList.last ());
414
+ if (val.errorType ()) qWarning () << val.toString ();
415
+ js.globalObject ().setProperty (stringList.first (), val.toNumber ());
407
416
continue ;
408
417
} else {
409
418
for (auto && var2: var.split (' ,' )) {
410
419
var2.replace (QChar (' x' ), ' *' , Qt::CaseInsensitive);
411
- mod.push_back (var2.contains (' $' ) ? MathParser (¯oCoefficients).parse (var2) : var2.toDouble ());
420
+ if (var2.contains (' $' )) {
421
+ auto val = js.evaluate (var2);
422
+ if (val.errorType ()) qWarning () << val.toString ();
423
+ mod.push_back (val.toNumber ());
424
+ } else
425
+ mod.push_back (var2.toDouble ());
412
426
}
413
427
}
414
428
0 commit comments