1 //============================================================================
2 //  Copyright (c) Kitware, Inc.
3 //  All rights reserved.
4 //  See LICENSE.txt for details.
5 //
6 //  This software is distributed WITHOUT ANY WARRANTY; without even
7 //  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
8 //  PURPOSE.  See the above copyright notice for more information.
9 //============================================================================
10 #ifndef vtk_m_exec_ColorTable_h
11 #define vtk_m_exec_ColorTable_h
12 
13 #include <vtkm/Deprecated.h>
14 #include <vtkm/Types.h>
15 
16 namespace vtkm
17 {
18 
19 enum struct ColorSpace
20 {
21   RGB,
22   HSV,
23   HSVWrap,
24   Lab,
25   Diverging
26 };
27 
28 } // namespace vtkm
29 
30 namespace vtkm
31 {
32 namespace exec
33 {
34 
35 class VTKM_ALWAYS_EXPORT ColorTable
36 {
37 public:
38   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpace(vtkm::Float64) const;
39 
40   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpace(const vtkm::Vec3f_32& rgb1,
41                                                        const vtkm::Vec3f_32& rgb2,
42                                                        vtkm::Float32 weight) const;
43 
44   inline VTKM_EXEC vtkm::Float32 MapThroughOpacitySpace(vtkm::Float64 value) const;
45 
46   vtkm::ColorSpace Space;
47 
48   vtkm::Float64 const* ColorNodes = nullptr;
49   vtkm::Vec3f_32 const* RGB = nullptr;
50 
51   vtkm::Float64 const* ONodes = nullptr;
52   vtkm::Float32 const* Alpha = nullptr;
53   vtkm::Vec2f_32 const* MidSharp = nullptr;
54 
55   vtkm::Int32 ColorSize = 0;
56   vtkm::Int32 OpacitySize = 0;
57 
58   vtkm::Vec3f_32 NaNColor = { 0.5f, 0.0f, 0.0f };
59   vtkm::Vec3f_32 BelowRangeColor = { 0.0f, 0.0f, 0.0f };
60   vtkm::Vec3f_32 AboveRangeColor = { 0.0f, 0.0f, 0.0f };
61 
62   bool UseClamping = true;
63 
64 private:
65   inline VTKM_EXEC void FindColors(vtkm::Float64 value,
66                                    vtkm::Vec3f_32& first,
67                                    vtkm::Vec3f_32& second,
68                                    vtkm::Float32& weight) const;
69 
70   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpaceRGB(const vtkm::Vec3f_32& rgb1,
71                                                           const vtkm::Vec3f_32& rgb2,
72                                                           vtkm::Float32 weight) const;
73 
74   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpaceHSV(const vtkm::Vec3f_32& rgb1,
75                                                           const vtkm::Vec3f_32& rgb2,
76                                                           vtkm::Float32 weight) const;
77 
78   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpaceHSVWrap(const vtkm::Vec3f_32& rgb1,
79                                                               const vtkm::Vec3f_32& rgb2,
80                                                               vtkm::Float32 weight) const;
81 
82   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpaceLab(const vtkm::Vec3f_32& rgb1,
83                                                           const vtkm::Vec3f_32& rgb2,
84                                                           vtkm::Float32 weight) const;
85 
86   inline VTKM_EXEC vtkm::Vec3f_32 MapThroughColorSpaceDiverging(const vtkm::Vec3f_32& rgb1,
87                                                                 const vtkm::Vec3f_32& rgb2,
88                                                                 vtkm::Float32 weight) const;
89 };
90 
91 class VTKM_ALWAYS_EXPORT VTKM_DEPRECATED(1.6, "Use vtkm::exec::ColorTable.") ColorTableBase
92   : public vtkm::exec::ColorTable
93 {
94 };
95 
96 class VTKM_ALWAYS_EXPORT VTKM_DEPRECATED(1.6, "Use vtkm::exec::ColorTable.") ColorTableRGB final
97   : public ColorTable
98 {
99 public:
ColorTableRGB()100   ColorTableRGB() { this->Space = vtkm::ColorSpace::RGB; }
101 };
102 
103 class VTKM_ALWAYS_EXPORT VTKM_DEPRECATED(1.6, "Use vtkm::exec::ColorTable.") ColorTableHSV final
104   : public ColorTable
105 {
106 public:
ColorTableHSV()107   ColorTableHSV() { this->Space = vtkm::ColorSpace::HSV; }
108 };
109 
110 class VTKM_ALWAYS_EXPORT VTKM_DEPRECATED(1.6, "Use vtkm::exec::ColorTable.") ColorTableHSVWrap final
111   : public ColorTable
112 {
113 public:
ColorTableHSVWrap()114   ColorTableHSVWrap() { this->Space = vtkm::ColorSpace::HSVWrap; }
115 };
116 
117 class VTKM_ALWAYS_EXPORT VTKM_DEPRECATED(1.6, "Use vtkm::exec::ColorTable.") ColorTableLab final
118   : public ColorTable
119 {
120 public:
ColorTableLab()121   ColorTableLab() { this->Space = vtkm::ColorSpace::Lab; }
122 };
123 
124 class VTKM_ALWAYS_EXPORT ColorTableDiverging final : public ColorTable
125 {
126 public:
ColorTableDiverging()127   ColorTableDiverging() { this->Space = vtkm::ColorSpace::Diverging; }
128 };
129 }
130 }
131 
132 #include <vtkm/exec/ColorTable.hxx>
133 
134 #endif
135