summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-21 08:16:09 (GMT)
committerclifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c>2010-02-21 08:16:09 (GMT)
commit230e3306fc0195fa7251884ee73f753ce04b4711 (patch)
tree48453ea0b3ce1b87efff2e3e27c12bdb4b168b42 /src
parent332e835f878d477102228a0659fd15c6700b36fe (diff)
Clifford Wolf:
Added exp(x), log(b, x), log(x) and ln(x) functions git-svn-id: http://svn.clifford.at/openscad/trunk@447 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'src')
-rw-r--r--src/func.cc42
1 files changed, 34 insertions, 8 deletions
diff --git a/src/func.cc b/src/func.cc
index fa04750..fa301dc 100644
--- a/src/func.cc
+++ b/src/func.cc
@@ -183,13 +183,6 @@ Value builtin_atan2(const QVector<QString>&, const QVector<Value> &args)
return Value();
}
-Value builtin_pow(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));
- return Value();
-}
-
Value builtin_round(const QVector<QString>&, const QVector<Value> &args)
{
if (args.size() == 1 && args[0].type == Value::NUMBER)
@@ -211,6 +204,13 @@ Value builtin_floor(const QVector<QString>&, const QVector<Value> &args)
return Value();
}
+Value builtin_pow(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));
+ return Value();
+}
+
Value builtin_sqrt(const QVector<QString>&, const QVector<Value> &args)
{
if (args.size() == 1 && args[0].type == Value::NUMBER)
@@ -218,6 +218,29 @@ Value builtin_sqrt(const QVector<QString>&, const QVector<Value> &args)
return Value();
}
+Value builtin_exp(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)
+{
+ if (args.size() == 2 && args[0].type == Value::NUMBER && args[1].type == Value::NUMBER)
+ return Value(log(args[1].num) / log(args[0].num));
+ if (args.size() == 1 && args[0].type == Value::NUMBER)
+ return Value(log(args[0].num) / log(10));
+ return Value();
+}
+
+Value builtin_ln(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)
{
QString str;
@@ -270,11 +293,14 @@ void initialize_builtin_functions()
builtin_functions["tan"] = new BuiltinFunction(&builtin_tan);
builtin_functions["atan"] = new BuiltinFunction(&builtin_atan);
builtin_functions["atan2"] = new BuiltinFunction(&builtin_atan2);
- builtin_functions["pow"] = new BuiltinFunction(&builtin_pow);
builtin_functions["round"] = new BuiltinFunction(&builtin_round);
builtin_functions["ceil"] = new BuiltinFunction(&builtin_ceil);
builtin_functions["floor"] = new BuiltinFunction(&builtin_floor);
+ builtin_functions["pow"] = new BuiltinFunction(&builtin_pow);
builtin_functions["sqrt"] = new BuiltinFunction(&builtin_sqrt);
+ builtin_functions["exp"] = new BuiltinFunction(&builtin_exp);
+ builtin_functions["log"] = new BuiltinFunction(&builtin_log);
+ builtin_functions["ln"] = new BuiltinFunction(&builtin_ln);
builtin_functions["str"] = new BuiltinFunction(&builtin_str);
builtin_functions["lookup"] = new BuiltinFunction(&builtin_lookup);
initialize_builtin_dxf_dim();
contact: Jan Huwald // Impressum