KSeExpr  4.0.4.0
ExprBuiltins.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: 2011-2019 Disney Enterprises, Inc.
2 // SPDX-License-Identifier: LicenseRef-Apache-2.0
3 // SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
4 // SPDX-License-Identifier: GPL-3.0-or-later
5 
6 #ifndef ExprBuiltins_h
7 #define ExprBuiltins_h
8 
9 #if !defined(_USE_MATH_DEFINES)
10 #define _USE_MATH_DEFINES
11 #endif
12 #include <cmath>
13 
14 #include "ExprFunc.h"
15 
18 #ifndef QT_TRANSLATE_NOOP
19 #define QT_TRANSLATE_NOOP(scope, x) x
20 #endif
21 #ifndef QT_TRANSLATE_NOOP_UTF8
22 #define QT_TRANSLATE_NOOP_UTF8(scope, x) x
23 #endif
24 
25 namespace KSeExpr
26 {
27 // trig
28 inline double deg(double angle)
29 {
30  return angle * (180 / M_PI);
31 }
32 inline double rad(double angle)
33 {
34  return angle * (M_PI / 180);
35 }
36 inline double cosd(double x)
37 {
38  return cos(rad(x));
39 }
40 inline double sind(double x)
41 {
42  return sin(rad(x));
43 }
44 inline double tand(double x)
45 {
46  return tan(rad(x));
47 }
48 inline double acosd(double x)
49 {
50  return deg(acos(x));
51 }
52 inline double asind(double x)
53 {
54  return deg(asin(x));
55 }
56 inline double atand(double x)
57 {
58  return deg(atan(x));
59 }
60 inline double atan2d(double y, double x)
61 {
62  return deg(atan2(y, x));
63 }
64 
65 // clamping
66 inline double clamp(double x, double lo, double hi)
67 {
68  return x < lo ? lo : x > hi ? hi : x;
69 }
70 inline double round(double x)
71 {
72  return x < 0 ? ceil(x - 0.5) : floor(x + 0.5);
73 }
74 inline double max(double x, double y)
75 {
76  return x > y ? x : y;
77 }
78 inline double min(double x, double y)
79 {
80  return x < y ? x : y;
81 }
82 
83 // blending / remapping
84 inline double invert(double x)
85 {
86  return 1 - x;
87 }
88 double compress(double x, double lo, double hi);
89 double expand(double x, double lo, double hi);
90 double fit(double x, double a1, double b1, double a2, double b2);
91 double gamma(double x, double g);
92 double bias(double x, double b);
93 double contrast(double x, double c);
94 double boxstep(double x, double a);
95 double linearstep(double x, double a, double b);
96 double smoothstep(double x, double a, double b);
97 double gaussstep(double x, double a, double b);
98 double remap(double x, double s, double r, double f, double interp);
99 double mix(double x, double y, double alpha);
100 Vec3d hsi(int n, const Vec3d *args);
101 Vec3d midhsi(int n, const Vec3d *args);
102 Vec3d rgbtohsl(const Vec3d &rgb);
103 Vec3d hsltorgb(const Vec3d &hsl);
104 
105 // noise
106 double hash(int n, double *args);
107 double noise(int n, const Vec3d *args);
108 double snoise(const Vec3d &p);
109 Vec3d cnoise(const Vec3d &p);
110 Vec3d vnoise(const Vec3d &p);
111 double turbulence(int n, const Vec3d *args);
112 Vec3d vturbulence(int n, const Vec3d *args);
113 Vec3d cturbulence(int n, const Vec3d *args);
114 double fbm(int n, const Vec3d *args);
115 Vec3d vfbm(int n, const Vec3d *args);
116 Vec3d cfbm(int n, const Vec3d *args);
117 double cellnoise(const Vec3d &p);
118 Vec3d ccellnoise(const Vec3d &p);
119 double pnoise(const Vec3d &p, const Vec3d &period);
120 
121 // vectors
122 double dist(const Vec3d &a, const Vec3d &b);
123 double length(const Vec3d &v);
124 double hypot(double x, double y);
125 double dot(const Vec3d &a, const Vec3d &b);
126 Vec3d norm(const Vec3d &a);
127 Vec3d cross(const Vec3d &a, const Vec3d &b);
128 double angle(const Vec3d &a, const Vec3d &b);
129 Vec3d ortho(const Vec3d &a, const Vec3d &b);
130 Vec3d up(const Vec3d &P, const Vec3d &upvec);
131 
132 // variations
133 double cycle(double index, double loRange, double hiRange);
134 double pick(int n, double *params);
135 double choose(int n, double *params);
136 double wchoose(int n, double *params);
137 double spline(int n, double *params);
138 
139 // add builtins to expression function table
141 } // namespace KSeExpr
142 
143 #endif
static constexpr std::array< int, 514 > p
Definition: NoiseTables.h:10
void(*)(const char *, const ExprFunc &, const char *) Define3
Definition: ExprFunc.h:50
void(*)(const char *, const ExprFunc &) Define
Definition: ExprFunc.h:49
KSeExpr_DEFAULT double_t floor(double_t val)
Definition: Utils.cpp:168
double gamma(double x, double g)
double max(double x, double y)
Definition: ExprBuiltins.h:74
double deg(double angle)
Definition: ExprBuiltins.h:28
double atan2d(double y, double x)
Definition: ExprBuiltins.h:60
double gaussstep(double x, double a, double b)
double fit(double x, double a1, double b1, double a2, double b2)
double mix(double x, double y, double alpha)
double asind(double x)
Definition: ExprBuiltins.h:52
double dist(const Vec3d &a, const Vec3d &b)
Vec3d vturbulence(int n, const Vec3d *args)
Vec3d rgbtohsl(const Vec3d &rgb)
double dot(const Vec3d &a, const Vec3d &b)
Vec3d cfbm(int n, const Vec3d *args)
double bias(double x, double b)
double pnoise(const Vec3d &p, const Vec3d &period)
Vec3d vfbm(int n, const Vec3d *args)
double contrast(double x, double c)
double hypot(double x, double y)
double noise(int n, const Vec3d *args)
Vec3d cturbulence(int n, const Vec3d *args)
Vec3d norm(const Vec3d &a)
double tand(double x)
Definition: ExprBuiltins.h:44
double length(const Vec3d &v)
double fbm(int n, const Vec3d *args)
double invert(double x)
Definition: ExprBuiltins.h:84
double angle(const Vec3d &a, const Vec3d &b)
Vec3d up(const Vec3d &P, const Vec3d &upvec)
double linearstep(double x, double a, double b)
double round(double x)
Definition: ExprBuiltins.h:70
double cycle(double index, double loRange, double hiRange)
double boxstep(double x, double a)
double expand(double x, double lo, double hi)
double smoothstep(double x, double a, double b)
Vec3d cross(const Vec3d &a, const Vec3d &b)
double remap(double x, double source, double range, double falloff, double interp)
double atand(double x)
Definition: ExprBuiltins.h:56
double hash(int n, double *args)
double spline(int n, double *params)
double turbulence(int n, const Vec3d *args)
double min(double x, double y)
Definition: ExprBuiltins.h:78
double snoise(const Vec3d &p)
Vec3d hsltorgb(const Vec3d &hsl)
double clamp(double x, double lo, double hi)
Definition: ExprBuiltins.h:66
Vec3d vnoise(const Vec3d &p)
Vec3d hsi(int n, const Vec3d *args)
double cosd(double x)
Definition: ExprBuiltins.h:36
void defineBuiltins(ExprFunc::Define, ExprFunc::Define3 define3)
double choose(int n, double *params)
double pick(int n, double *params)
double rad(double angle)
Definition: ExprBuiltins.h:32
Vec< double, 3, false > Vec3d
Definition: Vec.h:352
double acosd(double x)
Definition: ExprBuiltins.h:48
double compress(double x, double lo, double hi)
Vec3d ortho(const Vec3d &a, const Vec3d &b)
Vec3d midhsi(int n, const Vec3d *args)
double sind(double x)
Definition: ExprBuiltins.h:40
double wchoose(int n, double *params)
double cellnoise(const Vec3d &p)
Vec3d ccellnoise(const Vec3d &p)
Vec3d cnoise(const Vec3d &p)