You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
258 lines
6.9 KiB
258 lines
6.9 KiB
#ifndef __VCGLIB_COLORMAP_H |
|
#define __VCGLIB_COLORMAP_H |
|
|
|
#include <vcg/space/color4.h> |
|
#include <map> |
|
#include <vector> |
|
|
|
// Colormaps sampled from Matplotlib |
|
// https://matplotlib.org |
|
|
|
namespace vcg { |
|
|
|
enum ColorMap { |
|
RGB = 0, |
|
Viridis = 1, |
|
Plasma = 2, |
|
Cividis = 3, |
|
Turbo = 4, |
|
RdPu = 5, |
|
}; |
|
|
|
static std::vector<ColorMap> ColorMapEnums = { |
|
RGB, |
|
Viridis, |
|
Plasma, |
|
Cividis, |
|
Turbo, |
|
RdPu, |
|
}; |
|
|
|
static std::map<ColorMap, std::vector<vcg::Color4b>> colorMaps = { |
|
{ |
|
ColorMap::Viridis, |
|
{ |
|
vcg::Color4b(68, 1, 84, 255), |
|
vcg::Color4b(70, 12, 95, 255), |
|
vcg::Color4b(71, 24, 106, 255), |
|
vcg::Color4b(72, 34, 115, 255), |
|
vcg::Color4b(70, 45, 124, 255), |
|
vcg::Color4b(68, 55, 129, 255), |
|
vcg::Color4b(65, 65, 134, 255), |
|
vcg::Color4b(61, 74, 137, 255), |
|
vcg::Color4b(57, 84, 139, 255), |
|
vcg::Color4b(53, 92, 140, 255), |
|
vcg::Color4b(49, 100, 141, 255), |
|
vcg::Color4b(46, 108, 142, 255), |
|
vcg::Color4b(42, 117, 142, 255), |
|
vcg::Color4b(39, 124, 142, 255), |
|
vcg::Color4b(36, 132, 141, 255), |
|
vcg::Color4b(34, 139, 141, 255), |
|
vcg::Color4b(31, 148, 139, 255), |
|
vcg::Color4b(30, 155, 137, 255), |
|
vcg::Color4b(31, 163, 134, 255), |
|
vcg::Color4b(36, 170, 130, 255), |
|
vcg::Color4b(46, 178, 124, 255), |
|
vcg::Color4b(57, 185, 118, 255), |
|
vcg::Color4b(71, 192, 110, 255), |
|
vcg::Color4b(87, 198, 101, 255), |
|
vcg::Color4b(107, 205, 89, 255), |
|
vcg::Color4b(126, 210, 78, 255), |
|
vcg::Color4b(146, 215, 65, 255), |
|
vcg::Color4b(167, 219, 51, 255), |
|
vcg::Color4b(191, 223, 36, 255), |
|
vcg::Color4b(212, 225, 26, 255), |
|
vcg::Color4b(233, 228, 25, 255), |
|
vcg::Color4b(253, 231, 36, 255), |
|
} |
|
}, |
|
{ |
|
ColorMap::Plasma, |
|
{ |
|
vcg::Color4b(12, 7, 134, 255), |
|
vcg::Color4b(33, 5, 143, 255), |
|
vcg::Color4b(49, 4, 150, 255), |
|
vcg::Color4b(63, 3, 156, 255), |
|
vcg::Color4b(78, 2, 161, 255), |
|
vcg::Color4b(90, 0, 165, 255), |
|
vcg::Color4b(103, 0, 167, 255), |
|
vcg::Color4b(115, 0, 168, 255), |
|
vcg::Color4b(129, 4, 167, 255), |
|
vcg::Color4b(140, 10, 164, 255), |
|
vcg::Color4b(151, 19, 160, 255), |
|
vcg::Color4b(162, 28, 154, 255), |
|
vcg::Color4b(173, 38, 146, 255), |
|
vcg::Color4b(182, 47, 139, 255), |
|
vcg::Color4b(190, 56, 131, 255), |
|
vcg::Color4b(198, 65, 124, 255), |
|
vcg::Color4b(207, 75, 116, 255), |
|
vcg::Color4b(214, 85, 109, 255), |
|
vcg::Color4b(220, 94, 102, 255), |
|
vcg::Color4b(227, 103, 95, 255), |
|
vcg::Color4b(233, 114, 87, 255), |
|
vcg::Color4b(238, 124, 80, 255), |
|
vcg::Color4b(243, 134, 73, 255), |
|
vcg::Color4b(246, 145, 66, 255), |
|
vcg::Color4b(250, 157, 58, 255), |
|
vcg::Color4b(252, 169, 52, 255), |
|
vcg::Color4b(253, 181, 45, 255), |
|
vcg::Color4b(253, 193, 40, 255), |
|
vcg::Color4b(251, 208, 36, 255), |
|
vcg::Color4b(248, 221, 36, 255), |
|
vcg::Color4b(244, 234, 38, 255), |
|
vcg::Color4b(239, 248, 33, 255), |
|
} |
|
}, |
|
{ |
|
ColorMap::Cividis, |
|
{ |
|
vcg::Color4b(0, 34, 77, 255), |
|
vcg::Color4b(0, 40, 91, 255), |
|
vcg::Color4b(0, 45, 105, 255), |
|
vcg::Color4b(4, 50, 112, 255), |
|
vcg::Color4b(28, 56, 110, 255), |
|
vcg::Color4b(40, 62, 109, 255), |
|
vcg::Color4b(50, 68, 108, 255), |
|
vcg::Color4b(59, 73, 107, 255), |
|
vcg::Color4b(69, 79, 107, 255), |
|
vcg::Color4b(77, 85, 108, 255), |
|
vcg::Color4b(84, 90, 108, 255), |
|
vcg::Color4b(91, 96, 110, 255), |
|
vcg::Color4b(99, 102, 111, 255), |
|
vcg::Color4b(106, 108, 113, 255), |
|
vcg::Color4b(113, 114, 115, 255), |
|
vcg::Color4b(120, 120, 118, 255), |
|
vcg::Color4b(128, 126, 120, 255), |
|
vcg::Color4b(135, 132, 120, 255), |
|
vcg::Color4b(143, 138, 119, 255), |
|
vcg::Color4b(151, 144, 118, 255), |
|
vcg::Color4b(160, 151, 117, 255), |
|
vcg::Color4b(168, 158, 115, 255), |
|
vcg::Color4b(176, 164, 112, 255), |
|
vcg::Color4b(184, 171, 109, 255), |
|
vcg::Color4b(194, 178, 105, 255), |
|
vcg::Color4b(202, 185, 100, 255), |
|
vcg::Color4b(211, 192, 95, 255), |
|
vcg::Color4b(219, 199, 89, 255), |
|
vcg::Color4b(229, 207, 80, 255), |
|
vcg::Color4b(238, 215, 71, 255), |
|
vcg::Color4b(248, 222, 59, 255), |
|
vcg::Color4b(253, 231, 55, 255), |
|
} |
|
}, |
|
{ |
|
ColorMap::Turbo, |
|
{ |
|
vcg::Color4b(48, 18, 59, 255), |
|
vcg::Color4b(57, 41, 114, 255), |
|
vcg::Color4b(64, 64, 161, 255), |
|
vcg::Color4b(68, 86, 199, 255), |
|
vcg::Color4b(70, 109, 230, 255), |
|
vcg::Color4b(70, 130, 248, 255), |
|
vcg::Color4b(64, 150, 254, 255), |
|
vcg::Color4b(52, 170, 248, 255), |
|
vcg::Color4b(37, 192, 230, 255), |
|
vcg::Color4b(26, 209, 210, 255), |
|
vcg::Color4b(24, 224, 189, 255), |
|
vcg::Color4b(34, 235, 169, 255), |
|
vcg::Color4b(59, 244, 141, 255), |
|
vcg::Color4b(89, 251, 114, 255), |
|
vcg::Color4b(120, 254, 89, 255), |
|
vcg::Color4b(149, 254, 68, 255), |
|
vcg::Color4b(174, 249, 55, 255), |
|
vcg::Color4b(195, 241, 51, 255), |
|
vcg::Color4b(214, 229, 53, 255), |
|
vcg::Color4b(231, 215, 56, 255), |
|
vcg::Color4b(244, 196, 58, 255), |
|
vcg::Color4b(251, 179, 54, 255), |
|
vcg::Color4b(254, 158, 46, 255), |
|
vcg::Color4b(252, 134, 36, 255), |
|
vcg::Color4b(246, 107, 24, 255), |
|
vcg::Color4b(237, 85, 15, 255), |
|
vcg::Color4b(226, 66, 9, 255), |
|
vcg::Color4b(212, 50, 5, 255), |
|
vcg::Color4b(192, 35, 2, 255), |
|
vcg::Color4b(172, 22, 1, 255), |
|
vcg::Color4b(148, 12, 1, 255), |
|
vcg::Color4b(122, 4, 2, 255), |
|
} |
|
}, |
|
{ |
|
ColorMap::RdPu, |
|
{ |
|
vcg::Color4b(255, 247, 243, 255), |
|
vcg::Color4b(254, 241, 237, 255), |
|
vcg::Color4b(253, 235, 231, 255), |
|
vcg::Color4b(253, 229, 226, 255), |
|
vcg::Color4b(252, 223, 219, 255), |
|
vcg::Color4b(252, 216, 212, 255), |
|
vcg::Color4b(252, 209, 205, 255), |
|
vcg::Color4b(252, 202, 198, 255), |
|
vcg::Color4b(251, 194, 191, 255), |
|
vcg::Color4b(251, 184, 188, 255), |
|
vcg::Color4b(250, 175, 185, 255), |
|
vcg::Color4b(250, 165, 182, 255), |
|
vcg::Color4b(249, 153, 178, 255), |
|
vcg::Color4b(248, 139, 173, 255), |
|
vcg::Color4b(248, 125, 168, 255), |
|
vcg::Color4b(247, 111, 163, 255), |
|
vcg::Color4b(243, 96, 159, 255), |
|
vcg::Color4b(236, 83, 157, 255), |
|
vcg::Color4b(230, 70, 154, 255), |
|
vcg::Color4b(223, 57, 152, 255), |
|
vcg::Color4b(212, 42, 146, 255), |
|
vcg::Color4b(200, 30, 140, 255), |
|
vcg::Color4b(189, 17, 134, 255), |
|
vcg::Color4b(177, 4, 127, 255), |
|
vcg::Color4b(162, 1, 124, 255), |
|
vcg::Color4b(149, 1, 122, 255), |
|
vcg::Color4b(136, 1, 121, 255), |
|
vcg::Color4b(123, 1, 119, 255), |
|
vcg::Color4b(109, 0, 115, 255), |
|
vcg::Color4b(97, 0, 112, 255), |
|
vcg::Color4b(85, 0, 109, 255), |
|
vcg::Color4b(73, 0, 106, 255), |
|
} |
|
}, |
|
}; |
|
|
|
inline vcg::Color4b GetColorMapping(double v, double minv, double maxv, ColorMap cmap) |
|
{ |
|
if (cmap == ColorMap::RGB) { |
|
vcg::Color4b c; |
|
c.SetColorRamp(float(minv), float(maxv), float(v)); |
|
return c; |
|
} |
|
|
|
int sz = int(colorMaps[cmap].size()); |
|
|
|
if (v > maxv) |
|
v = maxv; |
|
if (v < minv) |
|
v = minv; |
|
|
|
v = (v - minv) / (maxv - minv); |
|
|
|
double v0 = v * sz; |
|
int n0 = int(v0); |
|
|
|
if (n0 < 0) |
|
return colorMaps[cmap].front(); |
|
if (n0 >= sz - 1) |
|
return colorMaps[cmap].back(); |
|
|
|
int n1 = n0 + 1; |
|
|
|
double fract = v0 - n0; |
|
|
|
vcg::Color4b c0 = colorMaps[cmap][n0]; |
|
vcg::Color4b c1 = colorMaps[cmap][n1]; |
|
|
|
c0.lerp(c0, c1, fract); |
|
|
|
return c0; |
|
} |
|
|
|
} // namespace vcg |
|
|
|
#endif
|
|
|