diff options
author | Marius Kintel <marius@kintel.net> | 2014-01-03 18:58:13 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2014-01-03 18:58:13 (GMT) |
commit | 064247ae5e3975c3e9f529f4a4c4a0546892d96f (patch) | |
tree | b2a11e24e73a26fc4f6551982a1677d261dea9e5 /src/func.cc | |
parent | 8dca991045a9f0563e6b654b1b946e5d778e8fd2 (diff) | |
parent | c4a1d855f11d076d30e98f799315446da021514a (diff) |
Merge branch 'master' of github.com:openscad/openscad
Diffstat (limited to 'src/func.cc')
-rw-r--r-- | src/func.cc | 19 |
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)); |