diff options
author | Marius Kintel <marius@kintel.net> | 2014-01-03 18:17:58 (GMT) |
---|---|---|
committer | Marius Kintel <marius@kintel.net> | 2014-01-03 18:17:58 (GMT) |
commit | bee5233a916055d41bb4ee425f5df25b80f50f16 (patch) | |
tree | 7bfac9716f778ed685e62e2d0830d1905bc08fd2 /src/func.cc | |
parent | f093b53c3edb08ee0d64c5d6c2a1df723acfca2d (diff) | |
parent | c5223417e3ffe965d09d971865797206080eb0ae (diff) |
Merge branch 'vector-concat' of git://github.com/t-paul/openscad into t-paul-vector-concat
Conflicts:
src/Preferences.ui
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)); |