KSeExpr 6.0.0.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
25namespace KSeExpr
26{
27// trig
28inline double deg(double angle)
29{
30 return angle * (180 / M_PI);
31}
32inline double rad(double angle)
33{
34 return angle * (M_PI / 180);
35}
36inline double cosd(double x)
37{
38 return cos(rad(x));
39}
40inline double sind(double x)
41{
42 return sin(rad(x));
43}
44inline double tand(double x)
45{
46 return tan(rad(x));
47}
48inline double acosd(double x)
49{
50 return deg(acos(x));
51}
52inline double asind(double x)
53{
54 return deg(asin(x));
55}
56inline double atand(double x)
57{
58 return deg(atan(x));
59}
60inline double atan2d(double y, double x)
61{
62 return deg(atan2(y, x));
63}
64
65// clamping
66inline double clamp(double x, double lo, double hi)
67{
68 return x < lo ? lo : x > hi ? hi : x;
69}
70inline double round(double x)
71{
72 return x < 0 ? ceil(x - 0.5) : floor(x + 0.5);
73}
74inline double max(double x, double y)
75{
76 return x > y ? x : y;
77}
78inline double min(double x, double y)
79{
80 return x < y ? x : y;
81}
82
83// blending / remapping
84inline double invert(double x)
85{
86 return 1 - x;
87}
88double compress(double x, double lo, double hi);
89double expand(double x, double lo, double hi);
90double fit(double x, double a1, double b1, double a2, double b2);
91double gamma(double x, double g);
92double bias(double x, double b);
93double contrast(double x, double c);
94double boxstep(double x, double a);
95double linearstep(double x, double a, double b);
96double smoothstep(double x, double a, double b);
97double gaussstep(double x, double a, double b);
98double remap(double x, double s, double r, double f, double interp);
99double mix(double x, double y, double alpha);
100Vec3d hsi(int n, const Vec3d *args);
101Vec3d midhsi(int n, const Vec3d *args);
102Vec3d rgbtohsl(const Vec3d &rgb);
103Vec3d hsltorgb(const Vec3d &hsl);
104
105// noise
106double hash(int n, double *args);
107double noise(int n, const Vec3d *args);
108double snoise(const Vec3d &p);
109Vec3d cnoise(const Vec3d &p);
110Vec3d vnoise(const Vec3d &p);
111double turbulence(int n, const Vec3d *args);
112Vec3d vturbulence(int n, const Vec3d *args);
113Vec3d cturbulence(int n, const Vec3d *args);
114double fbm(int n, const Vec3d *args);
115Vec3d vfbm(int n, const Vec3d *args);
116Vec3d cfbm(int n, const Vec3d *args);
117double cellnoise(const Vec3d &p);
118Vec3d ccellnoise(const Vec3d &p);
119double pnoise(const Vec3d &p, const Vec3d &period);
120
121// vectors
122double dist(const Vec3d &a, const Vec3d &b);
123double length(const Vec3d &v);
124double hypot(double x, double y);
125double dot(const Vec3d &a, const Vec3d &b);
126Vec3d norm(const Vec3d &a);
127Vec3d cross(const Vec3d &a, const Vec3d &b);
128double angle(const Vec3d &a, const Vec3d &b);
129Vec3d ortho(const Vec3d &a, const Vec3d &b);
130Vec3d up(const Vec3d &P, const Vec3d &upvec);
131
132// variations
133double cycle(double index, double loRange, double hiRange);
134double pick(int n, double *params);
135double choose(int n, double *params);
136double wchoose(int n, double *params);
137double 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
double gamma(double x, double g)
double max(double x, double y)
double deg(double angle)
double atan2d(double y, double x)
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)
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)
double length(const Vec3d &v)
double fbm(int n, const Vec3d *args)
double invert(double x)
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)
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)
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)
double snoise(const Vec3d &p)
Vec3d hsltorgb(const Vec3d &hsl)
double clamp(double x, double lo, double hi)
Vec3d vnoise(const Vec3d &p)
Vec3d hsi(int n, const Vec3d *args)
double cosd(double x)
void defineBuiltins(ExprFunc::Define, ExprFunc::Define3 define3)
double choose(int n, double *params)
double pick(int n, double *params)
double rad(double angle)
Vec< double, 3, false > Vec3d
Definition Vec.h:352
double acosd(double x)
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)
double wchoose(int n, double *params)
double cellnoise(const Vec3d &p)
Vec3d ccellnoise(const Vec3d &p)
Vec3d cnoise(const Vec3d &p)