Chrysalis - Project Composer
Loading...
Searching...
No Matches
composer.h
Go to the documentation of this file.
1#ifndef CHRYSALIS_COMPOSER_H
2#define CHRYSALIS_COMPOSER_H
3
4#include "Project.h"
5#include "arguments/BinaryFunctionArgument.h"
6
7#define _min_(operand1, operand2) std::make_unique<BinaryFunctionArgument::Min>(operand1, operand2)
8#define _ray_(origin, angle) Proxy::Ray(_point_(origin), angle)
9#define _point_(pointName) Proxy::Name(PointName::pointName)
10#define _param_(parameterName) std::make_unique<ParameterArgument>(project_->getParameters()->get(ParameterName::parameterName))
11#define _option_(optionName) Proxy::Name(Options::optionName)
12#define _outline_(outlineName) Proxy::Outline(OutlineName::outlineName)
13#define _expression_(expressionName) Proxy::Name(Expressions::expressionName)
14
15#define up 90
16#define right 0
17#define left 180
18#define down 270
19
20#define _angle_(from, to) std::make_unique<VectorFunctionArgument::Angle>(_point_(from), _point_(to))
21#define _length_(from, to) std::make_unique<VectorFunctionArgument::Length>(_point_(from), _point_(to))
22
23#define VECTOR_2(angle, length) Proxy::Vector(angle, length)
24#define VECTOR_3(origin, angle, length) Proxy::Vector(_point_(origin), angle, length)
25
26#define _vector_(...) BOOST_PP_OVERLOAD(VECTOR_, __VA_ARGS__)(__VA_ARGS__)
27
28#define REPEAT_SEGMENT(d, data, elem) _segment_ elem
29#define segments(...) new args::container(std::initializer_list<args::line*>{ \
30BOOST_PP_SEQ_ENUM(BOOST_PP_SEQ_TRANSFORM(REPEAT_SEGMENT, ~, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__))) \
31})
32#define _segment_(from, to) Proxy::Segment(new args::segment(_point_(from), _point_(to)))
33
34#define DART_2(from, to) seg(_segment_(from, to))
35#define DART_3(origin, angle, length) vec(_vector_(origin, angle, length))
36
37#define dart(...) BOOST_PP_OVERLOAD(DART_, __VA_ARGS__)(__VA_ARGS__)
38#define edge(from, to) Proxy::Segment(_segment_(from, to))
39
40namespace Chrysalis {
41 args::number operator""_(long double number);
42
43 std::unique_ptr<BinaryFunctionArgument> operator+(args::number&& a, args::number&& b);
44 std::unique_ptr<BinaryFunctionArgument> operator-(args::number&& a, args::number&& b);
45 std::unique_ptr<BinaryFunctionArgument> operator*(args::number&& a, args::number&& b);
46 std::unique_ptr<BinaryFunctionArgument> operator/(args::number&& a, args::number&& b);
47
48 std::unique_ptr<BinaryFunctionArgument> operator+(args::number&& a, double b);
49 std::unique_ptr<BinaryFunctionArgument> operator-(args::number&& a, double b);
50 std::unique_ptr<BinaryFunctionArgument> operator*(args::number&& a, double b);
51 std::unique_ptr<BinaryFunctionArgument> operator/(args::number&& a, double b);
52
53 std::unique_ptr<BinaryFunctionArgument> operator+(double a, args::number&& b);
54 std::unique_ptr<BinaryFunctionArgument> operator-(double a, args::number&& b);
55 std::unique_ptr<BinaryFunctionArgument> operator*(double a, args::number&& b);
56 std::unique_ptr<BinaryFunctionArgument> operator/(double a, args::number&& b);
57
58 const args::condition* operator<(args::number&& a, args::number&& b);
59}
60
61#endif //CHRYSALIS_COMPOSER_H
Definition composer.h:40
std::unique_ptr< BinaryFunctionArgument > operator-(args::number &&a, args::number &&b)
Definition composer.cpp:15
std::unique_ptr< BinaryFunctionArgument > operator*(args::number &&a, args::number &&b)
Definition composer.cpp:19
const args::condition * operator<(args::number &&a, args::number &&b)
Definition composer.cpp:59
std::unique_ptr< BinaryFunctionArgument > operator+(args::number &&a, args::number &&b)
Definition composer.cpp:11
std::unique_ptr< BinaryFunctionArgument > operator/(args::number &&a, args::number &&b)
Definition composer.cpp:23