diff options
author | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-23 20:47:54 (GMT) |
---|---|---|
committer | kintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c> | 2010-02-23 20:47:54 (GMT) |
commit | f3d16e23b959be4eb05c50e09a880b1e642f3432 (patch) | |
tree | 9e27ce8f230fa3c8645c363a3823d82649839261 /src/func.cc | |
parent | 64c3be3fd7734f94f1057825ad66ba4ac2393134 (diff) |
Multiple non-MDI assumptions were made, setting CWD and assuming it didn't change. Fix required to pass more context to nodes (functions). It's not totally clean, but it's a start. Fixes bugs: opening multiple files simultaneously only loaded the first file, refreshing an scad file referencing an external file failed if another scad file was opened in the meantime.
git-svn-id: http://svn.clifford.at/openscad/trunk@451 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src/func.cc')
-rw-r--r-- | src/func.cc | 54 |
1 files changed, 27 insertions, 27 deletions
diff --git a/src/func.cc b/src/func.cc index fa301dc..ca7a8d4 100644 --- a/src/func.cc +++ b/src/func.cc @@ -80,9 +80,9 @@ BuiltinFunction::~BuiltinFunction() { } -Value BuiltinFunction::evaluate(const Context*, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const +Value BuiltinFunction::evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const { - return eval_func(call_argnames, call_argvalues); + return eval_func(ctx, call_argnames, call_argvalues); } QString BuiltinFunction::dump(QString indent, QString name) const @@ -110,7 +110,7 @@ static double rad2deg(double x) return x; } -Value builtin_min(const QVector<QString>&, const QVector<Value> &args) +Value builtin_min(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() >= 1 && args[0].type == Value::NUMBER) { double val = args[0].num; @@ -122,7 +122,7 @@ Value builtin_min(const QVector<QString>&, const QVector<Value> &args) return Value(); } -Value builtin_max(const QVector<QString>&, const QVector<Value> &args) +Value builtin_max(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() >= 1 && args[0].type == Value::NUMBER) { double val = args[0].num; @@ -134,98 +134,98 @@ Value builtin_max(const QVector<QString>&, const QVector<Value> &args) return Value(); } -Value builtin_sin(const QVector<QString>&, const QVector<Value> &args) +Value builtin_sin(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(sin(deg2rad(args[0].num))); return Value(); } -Value builtin_cos(const QVector<QString>&, const QVector<Value> &args) +Value builtin_cos(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(cos(deg2rad(args[0].num))); return Value(); } -Value builtin_asin(const QVector<QString>&, const QVector<Value> &args) +Value builtin_asin(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(rad2deg(asin(args[0].num))); return Value(); } -Value builtin_acos(const QVector<QString>&, const QVector<Value> &args) +Value builtin_acos(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(rad2deg(acos(args[0].num))); return Value(); } -Value builtin_tan(const QVector<QString>&, const QVector<Value> &args) +Value builtin_tan(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(tan(deg2rad(args[0].num))); return Value(); } -Value builtin_atan(const QVector<QString>&, const QVector<Value> &args) +Value builtin_atan(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(rad2deg(atan(args[0].num))); return Value(); } -Value builtin_atan2(const QVector<QString>&, const QVector<Value> &args) +Value builtin_atan2(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) return Value(rad2deg(atan2(args[0].num, args[1].num))); return Value(); } -Value builtin_round(const QVector<QString>&, const QVector<Value> &args) +Value builtin_pow(const Context *, const QVector<QString>&, const QVector<Value> &args) { - if (args.size() == 1 && args[0].type == Value::NUMBER) - return Value(round(args[0].num)); + if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) + return Value(pow(args[0].num, args[1].num)); return Value(); } -Value builtin_ceil(const QVector<QString>&, const QVector<Value> &args) +Value builtin_round(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) - return Value(ceil(args[0].num)); + return Value(round(args[0].num)); return Value(); } -Value builtin_floor(const QVector<QString>&, const QVector<Value> &args) +Value builtin_ceil(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) - return Value(floor(args[0].num)); + return Value(ceil(args[0].num)); return Value(); } -Value builtin_pow(const QVector<QString>&, const QVector<Value> &args) +Value builtin_floor(const Context *, const QVector<QString>&, const QVector<Value> &args) { - if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) - return Value(pow(args[0].num, args[1].num)); + if (args.size() == 1 && args[0].type == Value::NUMBER) + return Value(floor(args[0].num)); return Value(); } -Value builtin_sqrt(const QVector<QString>&, const QVector<Value> &args) +Value builtin_sqrt(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(sqrt(args[0].num)); return Value(); } -Value builtin_exp(const QVector<QString>&, const QVector<Value> &args) +Value builtin_exp(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(exp(args[0].num)); return Value(); } -Value builtin_log(const QVector<QString>&, const QVector<Value> &args) +Value builtin_log(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER) return Value(log(args[1].num) / log(args[0].num)); @@ -234,14 +234,14 @@ Value builtin_log(const QVector<QString>&, const QVector<Value> &args) return Value(); } -Value builtin_ln(const QVector<QString>&, const QVector<Value> &args) +Value builtin_ln(const Context *, const QVector<QString>&, const QVector<Value> &args) { if (args.size() == 1 && args[0].type == Value::NUMBER) return Value(log(args[0].num)); return Value(); } -Value builtin_str(const QVector<QString>&, const QVector<Value> &args) +Value builtin_str(const Context *, const QVector<QString>&, const QVector<Value> &args) { QString str; for (int i = 0; i < args.size(); i++) @@ -254,7 +254,7 @@ Value builtin_str(const QVector<QString>&, const QVector<Value> &args) return Value(str); } -Value builtin_lookup(const QVector<QString>&, const QVector<Value> &args) +Value builtin_lookup(const Context *, const QVector<QString>&, const QVector<Value> &args) { double p, low_p, low_v, high_p, high_v; if (args.size() < 2 || !args[0].getnum(p) || args[1].vec.size() < 2 || args[1].vec[0]->vec.size() < 2) |