From 2afd95ac0a07b3cf0c11fd68fbd423457267af98 Mon Sep 17 00:00:00 2001 From: Helge Norberg Date: Wed, 23 Dec 2015 00:20:34 +0100 Subject: [PATCH] sin() and cos() function added to scene producer expressions. --- core/producer/scene/expression_parser.cpp | 27 ++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/core/producer/scene/expression_parser.cpp b/core/producer/scene/expression_parser.cpp index ab40286c3..68e94ff30 100644 --- a/core/producer/scene/expression_parser.cpp +++ b/core/producer/scene/expression_parser.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include @@ -122,6 +123,28 @@ boost::any create_animate_function(const std::vector& params, const return to_animate.animated(frame_counter, duration, tw); } +boost::any create_sin_function(const std::vector& params, const variable_repository& var_repo) +{ + if (params.size() != 1) + CASPAR_THROW_EXCEPTION(user_error() + << msg_info(L"sin() function requires one parameters: angle")); + + auto angle = require(params.at(0)); + + return angle.transformed([](double a) { return std::sin(a); }); +} + +boost::any create_cos_function(const std::vector& params, const variable_repository& var_repo) +{ + if (params.size() != 1) + CASPAR_THROW_EXCEPTION(user_error() + << msg_info(L"cos() function requires one parameters: angle")); + + auto angle = require(params.at(0)); + + return angle.transformed([](double a) { return std::cos(a); }); +} + boost::any parse_function( const std::wstring& function_name, std::wstring::const_iterator& cursor, @@ -130,7 +153,9 @@ boost::any parse_function( { static std::map& params, const variable_repository& var_repo)>> FUNCTIONS { - {L"animate", create_animate_function } + {L"animate", create_animate_function }, + {L"sin", create_sin_function }, + {L"cos", create_cos_function } }; auto function = FUNCTIONS.find(function_name); -- 2.39.2