summaryrefslogtreecommitdiff
path: root/src/func.cc
diff options
context:
space:
mode:
authorMarius Kintel <marius@kintel.net>2014-01-03 18:58:13 (GMT)
committerMarius Kintel <marius@kintel.net>2014-01-03 18:58:13 (GMT)
commit064247ae5e3975c3e9f529f4a4c4a0546892d96f (patch)
treeb2a11e24e73a26fc4f6551982a1677d261dea9e5 /src/func.cc
parent8dca991045a9f0563e6b654b1b946e5d778e8fd2 (diff)
parentc4a1d855f11d076d30e98f799315446da021514a (diff)
Merge branch 'master' of github.com:openscad/openscad
Diffstat (limited to 'src/func.cc')
-rw-r--r--src/func.cc19
1 files changed, 19 insertions, 0 deletions
diff --git a/src/func.cc b/src/func.cc
index 4587f72..878bc1c 100644
--- a/src/func.cc
+++ b/src/func.cc
@@ -343,6 +343,24 @@ Value builtin_str(const Context *, const EvalContext *evalctx)
return Value(stream.str());
}
+Value builtin_concat(const Context *, const EvalContext *evalctx)
+{
+ Value::VectorType result;
+
+ for (size_t i = 0; i < evalctx->numArgs(); i++) {
+ const Value v = evalctx->getArgValue(i);
+ if (v.type() == Value::VECTOR) {
+ Value::VectorType vec = v.toVector();
+ for (Value::VectorType::const_iterator it = vec.begin(); it != vec.end(); it++) {
+ result.push_back(*it);
+ }
+ } else {
+ result.push_back(v);
+ }
+ }
+ return Value(result);
+}
+
Value builtin_lookup(const Context *, const EvalContext *evalctx)
{
double p, low_p, low_v, high_p, high_v;
@@ -604,6 +622,7 @@ void register_builtin_functions()
Builtins::init("log", new BuiltinFunction(&builtin_log));
Builtins::init("ln", new BuiltinFunction(&builtin_ln));
Builtins::init("str", new BuiltinFunction(&builtin_str));
+ Builtins::init("concat", new BuiltinFunction(&builtin_concat, Feature::ExperimentalConcatFunction));
Builtins::init("lookup", new BuiltinFunction(&builtin_lookup));
Builtins::init("search", new BuiltinFunction(&builtin_search));
Builtins::init("version", new BuiltinFunction(&builtin_version));
contact: Jan Huwald // Impressum