Tissue Forge C++ 0.2.1
Interactive, particle-based physics, chemistry and biology modeling and simulation environment
Loading...
Searching...
No Matches
colormaps.h
1#pragma once
2
3#include <array>
4#include <algorithm>
5
6#include <types/tf_types.h>
7
8namespace colormaps {
9 typedef float real;
10 typedef TissueForge::fVector3 rgb_color;
11
12 namespace all {
13 namespace {
14 inline real lerp(int i, real x, const real *values, size_t N = 256) {
15 x = std::max(std::min(x, 1.0f), 0.0f);
16 real dx = x*N;
17 int ix = std::min((int)std::trunc(x*(N - 1)), (int)(N - 2));
18 real f_lower = values[ix * 3 + i];
19 real f_upper = values[(ix + 1) * 3 + i];
20 return f_lower + (dx - ix)*(f_upper - f_lower);
21 }
22 }
23
24 inline rgb_color grey_0_100_c0(real x) {
25 static const real values[] = {
26#include "CETperceptual/linear_grey_0-100_c0_n256.csv"
27 };
28 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
29 }
30
31 inline rgb_color grey_10_95_c0(real x) {
32 static const real values[] = {
33#include "CETperceptual/linear_grey_10-95_c0_n256.csv"
34 };
35 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
36 }
37
38 inline rgb_color kryw_0_100_c71(real x) {
39 static const real values[] = {
40#include "CETperceptual/linear_kryw_0-100_c71_n256.csv"
41 };
42 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
43 }
44
45 inline rgb_color kryw_0_97_c73(real x) {
46 static const real values[] = {
47#include "CETperceptual/linear_kryw_0-97_c73_n256.csv"
48 };
49 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
50 }
51
52 inline rgb_color green_5_95_c69(real x) {
53 static const real values[] = {
54#include "CETperceptual/linear_green_5-95_c69_n256.csv"
55 };
56 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
57 }
58
59 inline rgb_color blue_5_95_c73(real x) {
60 static const real values[] = {
61#include "CETperceptual/linear_blue_5-95_c73_n256.csv"
62 };
63 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
64 }
65
66 inline rgb_color bmw_5_95_c86(real x) {
67 static const real values[] = {
68#include "CETperceptual/linear_bmw_5-95_c86_n256.csv"
69 };
70 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
71 }
72
73 inline rgb_color bmy_10_95_c71(real x) {
74 static const real values[] = {
75#include "CETperceptual/linear_bmy_10-95_c71_n256.csv"
76 };
77 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
78 }
79
80 inline rgb_color bgyw_15_100_c67(real x) {
81 static const real values[] = {
82#include "CETperceptual/linear_bgyw_15-100_c67_n256.csv"
83 };
84 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
85 }
86
87 inline rgb_color gow_60_85_c27(real x) {
88 static const real values[] = {
89#include "CETperceptual/linear_gow_60-85_c27_n256.csv"
90 };
91 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
92 }
93
94 inline rgb_color gow_65_90_c35(real x) {
95 static const real values[] = {
96#include "CETperceptual/linear_gow_65-90_c35_n256.csv"
97 };
98 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
99 }
100
101 inline rgb_color blue_95_50_c20(real x) {
102 static const real values[] = {
103#include "CETperceptual/linear_blue_95-50_c20_n256.csv"
104 };
105 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
106 }
107
108 inline rgb_color red_0_50_c52(real x) {
109 static const real values[] = {
110#include "CETperceptual/linear_ternary-red_0-50_c52_n256.csv"
111 };
112 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
113 }
114
115 inline rgb_color green_0_46_c42(real x) {
116 static const real values[] = {
117#include "CETperceptual/linear_ternary-green_0-46_c42_n256.csv"
118 };
119 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
120 }
121
122 inline rgb_color blue_0_44_c57(real x) {
123 static const real values[] = {
124#include "CETperceptual/linear_ternary-blue_0-44_c57_n256.csv"
125 };
126 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
127 }
128
129 inline rgb_color bwr_40_95_c42(real x) {
130 static const real values[] = {
131#include "CETperceptual/diverging_bwr_40-95_c42_n256.csv"
132 };
133 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
134 }
135
136 inline rgb_color gwv_55_95_c39(real x) {
137 static const real values[] = {
138#include "CETperceptual/diverging_gwv_55-95_c39_n256.csv"
139 };
140 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
141 }
142
143 inline rgb_color gwr_55_95_c38(real x) {
144 static const real values[] = {
145#include "CETperceptual/diverging_gwr_55-95_c38_n256.csv"
146 };
147 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
148 }
149
150 inline rgb_color bkr_55_10_c35(real x) {
151 static const real values[] = {
152#include "CETperceptual/diverging_bkr_55-10_c35_n256.csv"
153 };
154 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
155 }
156
157 inline rgb_color bky_60_10_c30(real x) {
158 static const real values[] = {
159#include "CETperceptual/diverging_bky_60-10_c30_n256.csv"
160 };
161 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
162 }
163
164 inline rgb_color bjy_30_90_c45(real x) {
165 static const real values[] = {
166#include "CETperceptual/diverging-linear_bjy_30-90_c45_n256.csv"
167 };
168 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
169 }
170
171 inline rgb_color bjr_30_55_c53(real x) {
172 static const real values[] = {
173#include "CETperceptual/diverging-linear_bjr_30-55_c53_n256.csv"
174 };
175 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
176 }
177
178 inline rgb_color bwr_55_98_c37(real x) {
179 static const real values[] = {
180#include "CETperceptual/diverging_bwr_55-98_c37_n256.csv"
181 };
182 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
183 }
184
185 inline rgb_color cwm_80_100_c22(real x) {
186 static const real values[] = {
187#include "CETperceptual/diverging_cwm_80-100_c22_n256.csv"
188 };
189 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
190 }
191
192 inline rgb_color bgymr_45_85_c67(real x) {
193 static const real values[] = {
194#include "CETperceptual/diverging-rainbow_bgymr_45-85_c67_n256.csv"
195 };
196 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
197 }
198
199 inline rgb_color bgyrm_35_85_c69(real x) {
200 static const real values[] = {
201#include "CETperceptual/rainbow_bgyrm_35-85_c69_n256.csv"
202 };
203 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
204 }
205
206 inline rgb_color bgyr_35_85_c72(real x) {
207 static const real values[] = {
208#include "CETperceptual/rainbow_bgyr_35-85_c72_n256.csv"
209 };
210 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
211 }
212
213 inline rgb_color mrybm_35_75_c68(real x) {
214 static const real values[] = {
215#include "CETperceptual/cyclic_mrybm_35-75_c68_n256.csv"
216 };
217 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
218 }
219
220 inline rgb_color mygbm_30_95_c78(real x) {
221 static const real values[] = {
222#include "CETperceptual/cyclic_mygbm_30-95_c78_n256.csv"
223 };
224 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
225 }
226
227 inline rgb_color wrwbw_40_90_c42(real x) {
228 static const real values[] = {
229#include "CETperceptual/cyclic_wrwbw_40-90_c42_n256.csv"
230 };
231 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
232 }
233
234 inline rgb_color grey_15_85_c0(real x) {
235 static const real values[] = {
236#include "CETperceptual/cyclic_grey_15-85_c0_n256.csv"
237 };
238 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
239 }
240
241 inline rgb_color cgo_70_c39(real x) {
242 static const real values[] = {
243#include "CETperceptual/isoluminant_cgo_70_c39_n256.csv"
244 };
245 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
246 }
247
248 inline rgb_color cgo_80_c38(real x) {
249 static const real values[] = {
250#include "CETperceptual/isoluminant_cgo_80_c38_n256.csv"
251 };
252 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
253 }
254
255 inline rgb_color cm_70_c39(real x) {
256 static const real values[] = {
257#include "CETperceptual/isoluminant_cm_70_c39_n256.csv"
258 };
259 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
260 }
261
262 inline rgb_color cjo_70_c25(real x) {
263 static const real values[] = {
264#include "CETperceptual/diverging-isoluminant_cjo_70_c25_n256.csv"
265 };
266 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
267 }
268
269 inline rgb_color cjm_75_c23(real x) {
270 static const real values[] = {
271#include "CETperceptual/diverging-isoluminant_cjm_75_c23_n256.csv"
272 };
273 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
274 }
275
276 inline rgb_color kbjyw_5_95_c25(real x) {
277 static const real values[] = {
278#include "CETperceptual/linear-protanopic-deuteranopic_kbjyw_5-95_c25_n256.csv"
279 };
280 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
281 }
282
283 inline rgb_color kbw_5_98_c40(real x) {
284 static const real values[] = {
285#include "CETperceptual/linear-protanopic-deuteranopic_kbw_5-98_c40_n256.csv"
286 };
287 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
288 }
289
290 inline rgb_color bwy_60_95_c32(real x) {
291 static const real values[] = {
292#include "CETperceptual/diverging-protanopic-deuteranopic_bwy_60-95_c32_n256.csv"
293 };
294 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
295 }
296
297 inline rgb_color bwyk_16_96_c31(real x) {
298 static const real values[] = {
299#include "CETperceptual/cyclic-protanopic-deuteranopic_bwyk_16-96_c31_n256.csv"
300 };
301 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
302 }
303
304 inline rgb_color wywb_55_96_c33(real x) {
305 static const real values[] = {
306#include "CETperceptual/cyclic-protanopic-deuteranopic_wywb_55-96_c33_n256.csv"
307 };
308 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
309 }
310
311 inline rgb_color krjcw_5_98_c46(real x) {
312 static const real values[] = {
313#include "CETperceptual/linear-tritanopic_krjcw_5-98_c46_n256.csv"
314 };
315 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
316 }
317
318 inline rgb_color krjcw_5_95_c24(real x) {
319 static const real values[] = {
320#include "CETperceptual/linear-tritanopic_krjcw_5-95_c24_n256.csv"
321 };
322 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
323 }
324
325 inline rgb_color cwr_75_98_c20(real x) {
326 static const real values[] = {
327#include "CETperceptual/diverging-tritanopic_cwr_75-98_c20_n256.csv"
328 };
329 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
330 }
331
332 inline rgb_color cwrk_40_100_c20(real x) {
333 static const real values[] = {
334#include "CETperceptual/cyclic-tritanopic_cwrk_40-100_c20_n256.csv"
335 };
336 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
337 }
338
339 inline rgb_color wrwc_70_100_c20(real x) {
340 static const real values[] = {
341#include "CETperceptual/cyclic-tritanopic_wrwc_70-100_c20_n256.csv"
342 };
343 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
344 }
345
346 }
347 namespace linear {
348 using all::grey_0_100_c0;
349 using all::grey_10_95_c0;
350 using all::kryw_0_100_c71;
351 using all::kryw_0_97_c73;
352 using all::green_5_95_c69;
353 using all::blue_5_95_c73;
354 using all::bmw_5_95_c86;
355 using all::bmy_10_95_c71;
356 using all::bgyw_15_100_c67;
357 using all::gow_60_85_c27;
358 using all::gow_65_90_c35;
359 using all::blue_95_50_c20;
360 namespace diverging {
361 using all::bjy_30_90_c45;
362 using all::bjr_30_55_c53;
363 }
364 namespace ternary {
365 using all::red_0_50_c52;
366 using all::green_0_46_c42;
367 using all::blue_0_44_c57;
368 }
369 namespace colorblind {
370 namespace protanopic_deuteranopic {
371 using all::kbjyw_5_95_c25;
372 using all::kbw_5_98_c40;
373 }
374 namespace tritanopic {
375 using all::krjcw_5_98_c46;
376 using all::krjcw_5_95_c24;
377 }
378 using namespace protanopic_deuteranopic;
379 using namespace tritanopic;
380 }
381 using namespace diverging;
382 using namespace ternary;
383 using namespace colorblind;
384 }
385 namespace diverging {
386 using all::bwr_40_95_c42;
387 using all::gwv_55_95_c39;
388 using all::gwr_55_95_c38;
389 using all::bkr_55_10_c35;
390 using all::bky_60_10_c30;
391 using all::bwr_55_98_c37;
392 using all::cwm_80_100_c22;
393 namespace linear {
394 using all::bjy_30_90_c45;
395 using all::bjr_30_55_c53;
396 }
397 namespace rainbow {
398 using all::bgymr_45_85_c67;
399 }
400 namespace isoluminant {
401 using all::cjo_70_c25;
402 using all::cjm_75_c23;
403 }
404 namespace colorblind {
405 namespace protanopic_deuteranopic {
406 using all::bwy_60_95_c32;
407 }
408 namespace tritanopic {
409 using all::cwr_75_98_c20;
410 }
411 using namespace protanopic_deuteranopic;
412 using namespace tritanopic;
413 }
414 using namespace linear;
415 using namespace rainbow;
416 using namespace isoluminant;
417 using namespace colorblind;
418 }
419 namespace rainbow {
420 using all::bgyrm_35_85_c69;
421 using all::bgyr_35_85_c72;
422 namespace diverging {
423 using all::bgymr_45_85_c67;
424 }
425 using namespace diverging;
426 }
427 namespace cyclic {
428 using all::mrybm_35_75_c68;
429 using all::mygbm_30_95_c78;
430 using all::wrwbw_40_90_c42;
431 using all::grey_15_85_c0;
432 namespace colorblind {
433 namespace protanopic_deuteranopic {
434 using all::bwyk_16_96_c31;
435 using all::wywb_55_96_c33;
436 }
437 namespace tritanopic {
438 using all::cwrk_40_100_c20;
439 using all::wrwc_70_100_c20;
440 }
441 using namespace protanopic_deuteranopic;
442 using namespace tritanopic;
443 }
444 using namespace colorblind;
445 }
446 namespace isoluminant {
447 using all::cgo_70_c39;
448 using all::cgo_80_c38;
449 using all::cm_70_c39;
450 namespace diverging {
451 using all::cjo_70_c25;
452 using all::cjm_75_c23;
453 }
454 using namespace diverging;
455 }
456 namespace colorblind {
457 namespace protanopic_deuteranopic {
458 namespace linear {
459 using all::kbjyw_5_95_c25;
460 using all::kbw_5_98_c40;
461 }
462 namespace diverging {
463 using all::bwy_60_95_c32;
464 }
465 namespace cyclic {
466 using all::bwyk_16_96_c31;
467 using all::wywb_55_96_c33;
468 }
469 using namespace linear;
470 using namespace diverging;
471 using namespace cyclic;
472 }
473 namespace tritanopic {
474 namespace linear {
475 using all::krjcw_5_98_c46;
476 using all::krjcw_5_95_c24;
477 }
478 namespace diverging {
479 using all::cwr_75_98_c20;
480 }
481 namespace cyclic {
482 using all::cwrk_40_100_c20;
483 using all::wrwc_70_100_c20;
484 }
485 using namespace linear;
486 using namespace diverging;
487 using namespace cyclic;
488 }
489 using namespace protanopic_deuteranopic;
490 using namespace tritanopic;
491 }
492 using namespace all;
493}