summaryrefslogtreecommitdiff
path: root/src/func.cc
diff options
context:
space:
mode:
authorkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-23 20:47:54 (GMT)
committerkintel <kintel@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-23 20:47:54 (GMT)
commitf3d16e23b959be4eb05c50e09a880b1e642f3432 (patch)
tree9e27ce8f230fa3c8645c363a3823d82649839261 /src/func.cc
parent64c3be3fd7734f94f1057825ad66ba4ac2393134 (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.cc54
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)
contact: Jan Huwald // Impressum