Scroom  0.14
colormappable.hh
Go to the documentation of this file.
1 /*
2  * Scroom - Generic viewer for 2D data
3  * Copyright (C) 2009-2022 Kees-Jan Dijkzeul
4  *
5  * SPDX-License-Identifier: LGPL-2.1
6  */
7 
8 #pragma once
9 
10 #include <string>
11 #include <vector>
12 
13 #include <boost/shared_ptr.hpp>
14 #include <boost/weak_ptr.hpp>
15 
16 #include <scroom/assertions.hh>
17 #include <scroom/color.hh>
18 #include <scroom/observable.hh>
20 
21 const std::string COLORMAPPABLE_PROPERTY_NAME = "Colormappable";
22 const std::string MONOCHROME_COLORMAPPABLE_PROPERTY_NAME = "Monochrome Colormappable";
23 const std::string TRANSPARENT_BACKGROUND_PROPERTY_NAME = "Transparent Background";
24 
28 class Colormap
29 {
30 public:
31  using Ptr = boost::shared_ptr<Colormap>;
32  using ConstPtr = boost::shared_ptr<const Colormap>;
33  using WeakPtr = boost::weak_ptr<Colormap>;
34 
35 public:
36  std::string name;
37  std::vector<Color> colors;
39 private:
42  : name("Empty")
43  {
44  }
45 
46 public:
48  static Colormap::Ptr create() { return Ptr(new Colormap()); }
49 
52  {
53  Colormap::Ptr result = create();
54  result->name = "Default";
55  result->colors.reserve(n);
56  result->colors.clear();
57  const double max = n - 1;
58  for(int i = 0; i < n; i++)
59  {
60  result->colors.emplace_back(i / max); // Min is black
61  }
62 
63  return result;
64  }
65 
68  {
69  Colormap::Ptr result = create();
70  result->name = "0 is white";
71  result->colors.reserve(n);
72  result->colors.clear();
73  const double max = n - 1;
74  for(int i = 0; i < n; i++)
75  {
76  result->colors.emplace_back((max - i) / max); // Min is white
77  }
78 
79  return result;
80  }
81 
82  [[nodiscard]] Ptr clone() const { return Ptr(new Colormap(*this)); }
83 
84  void setAlpha(double alpha)
85  {
86  for(Color& c: colors)
87  {
88  c.setAlpha(alpha);
89  }
90  }
91 
92  [[nodiscard]] Ptr setAlpha(double alpha) const
93  {
94  Ptr result = clone();
95  result->setAlpha(alpha);
96  return result;
97  }
98 };
99 
113 class Colormappable : private Interface
114 {
115 public:
116  using Ptr = boost::shared_ptr<Colormappable>;
117  using WeakPtr = boost::weak_ptr<Colormappable>;
118 
120  virtual void setColormap(Colormap::Ptr colormap) = 0;
121 
123  virtual Colormap::Ptr getOriginalColormap() = 0;
124 
126  virtual int getNumberOfColors() = 0;
127 
132  virtual Color getMonochromeColor() = 0;
133  virtual void setMonochromeColor(const Color& c) = 0;
140  virtual void setTransparentBackground() = 0;
141  virtual void disableTransparentBackground() = 0;
142  virtual bool getTransparentBackground() = 0;
144 };
145 
147 {
148 public:
149  using Ptr = boost::shared_ptr<ColormapProvider>;
150 
151 public:
152  virtual Colormap::Ptr getColormap() = 0;
153 };
154 
156  : public ColormapProvider
157  , public Colormappable
158 {
159 public:
160  using Ptr = boost::shared_ptr<ColormapHelperBase>;
161 
162 public:
165 
166 public:
167  explicit ColormapHelperBase(Colormap::Ptr const& colormap);
168  virtual std::map<std::string, std::string> getProperties() = 0;
169 
171  // Colormappable
173  void setColormap(Colormap::Ptr colormap) override;
175  int getNumberOfColors() override;
176  Color getMonochromeColor() override;
177  void setMonochromeColor(const Color& c) override;
178  void setTransparentBackground() override;
179  void disableTransparentBackground() override;
180  bool getTransparentBackground() override;
181 
183  // ColormapProvider
185  Colormap::Ptr getColormap() override;
186 
188  // Helpers
191 
192 private:
193  [[noreturn]] static void OperationNotSupported();
194 };
195 
197 {
198 public:
199  static Ptr create(int numberOfColors);
200  static Ptr createInverted(int numberOfColors);
201  static Ptr create(Colormap::Ptr const& colormap);
202 
203  std::map<std::string, std::string> getProperties() override;
204 
205 private:
206  explicit ColormapHelper(Colormap::Ptr const& colormap);
207 };
208 
210 {
211 public:
212  static Ptr create(int numberOfColors);
213  static Ptr createInverted(int numberOfColors);
214 
215  std::map<std::string, std::string> getProperties() override;
216 
218  // Colormappable
220 
221  Color getMonochromeColor() override;
222  void setMonochromeColor(const Color& c) override;
223  void setTransparentBackground() override;
224  void disableTransparentBackground() override;
225  bool getTransparentBackground() override;
226 
227 private:
229  void regenerateColormap();
231 
232 private:
234  bool inverted;
238 };
ColormapHelperBase::ColormapHelperBase
ColormapHelperBase(Colormap::Ptr const &colormap)
Definition: colormap-helpers.cc:18
Colormap::createDefault
static Colormap::Ptr createDefault(int n)
Definition: colormappable.hh:51
ColormapHelperBase::getOriginalColormap
Colormap::Ptr getOriginalColormap() override
Definition: colormap-helpers.cc:28
assertions.hh
MonochromeColormapHelper::blackish
Color blackish
Definition: colormappable.hh:235
ColormapHelper::getProperties
std::map< std::string, std::string > getProperties() override
Definition: colormap-helpers.cc:67
MonochromeColormapHelper::disableTransparentBackground
void disableTransparentBackground() override
Definition: colormap-helpers.cc:141
Colormappable::getMonochromeColor
virtual Color getMonochromeColor()=0
ColormapHelperBase::originalColormap
Colormap::Ptr originalColormap
Definition: colormappable.hh:164
MonochromeColormapHelper::create
static Ptr create(int numberOfColors)
Definition: colormap-helpers.cc:72
ColormapHelperBase::OperationNotSupported
static void OperationNotSupported()
Definition: colormap-helpers.cc:48
ColormapHelperBase::setMonochromeColor
void setMonochromeColor(const Color &c) override
Definition: colormap-helpers.cc:34
MonochromeColormapHelper::whitish
Color whitish
Definition: colormappable.hh:236
ColormapHelperBase
Definition: colormappable.hh:155
MONOCHROME_COLORMAPPABLE_PROPERTY_NAME
const std::string MONOCHROME_COLORMAPPABLE_PROPERTY_NAME
Definition: colormappable.hh:22
presentationinterface.hh
ColormapProvider::getColormap
virtual Colormap::Ptr getColormap()=0
Colormappable::getNumberOfColors
virtual int getNumberOfColors()=0
Colormappable::getOriginalColormap
virtual Colormap::Ptr getOriginalColormap()=0
Colormap::setAlpha
Ptr setAlpha(double alpha) const
Definition: colormappable.hh:92
Colormap::create
static Colormap::Ptr create()
Definition: colormappable.hh:48
Colormap::colors
std::vector< Color > colors
Definition: colormappable.hh:37
observable.hh
Colormap::name
std::string name
Definition: colormappable.hh:36
Colormap::clone
Ptr clone() const
Definition: colormappable.hh:82
ColormapHelperBase::getProperties
virtual std::map< std::string, std::string > getProperties()=0
ColormapHelperBase::getColormap
Colormap::Ptr getColormap() override
Definition: colormap-helpers.cc:46
MonochromeColormapHelper::generateInitialColormap
static Colormap::Ptr generateInitialColormap(int numberOfColors, bool inverted)
Definition: colormap-helpers.cc:130
ColormapProvider::Ptr
boost::shared_ptr< ColormapProvider > Ptr
Definition: colormappable.hh:149
MonochromeColormapHelper::inverted
bool inverted
Definition: colormappable.hh:234
ColormapProvider
Definition: colormappable.hh:146
MonochromeColormapHelper::transparentBackground
bool transparentBackground
Definition: colormappable.hh:237
MonochromeColormapHelper::createInverted
static Ptr createInverted(int numberOfColors)
Definition: colormap-helpers.cc:77
ColormapHelper::ColormapHelper
ColormapHelper(Colormap::Ptr const &colormap)
Definition: colormap-helpers.cc:62
ColormapHelperBase::colormap
Colormap::Ptr colormap
Definition: colormappable.hh:163
Colormappable
Definition: colormappable.hh:113
ColormapHelperBase::setOriginalColormap
virtual void setOriginalColormap(Colormap::Ptr colormap)
Definition: colormap-helpers.cc:26
Colormap::setAlpha
void setAlpha(double alpha)
Definition: colormappable.hh:84
Colormappable::getTransparentBackground
virtual bool getTransparentBackground()=0
ColormapHelperBase::getNumberOfColors
int getNumberOfColors() override
Definition: colormap-helpers.cc:30
Colormap::Colormap
Colormap()
Definition: colormappable.hh:41
Colormap::Ptr
boost::shared_ptr< Colormap > Ptr
Definition: colormappable.hh:31
COLORMAPPABLE_PROPERTY_NAME
const std::string COLORMAPPABLE_PROPERTY_NAME
Definition: colormappable.hh:21
colormap
const Colormap::Ptr colormap
Definition: colormaphelpers_test.cc:54
color.hh
Colormap::WeakPtr
boost::weak_ptr< Colormap > WeakPtr
Definition: colormappable.hh:33
Colormap::createDefaultInverted
static Colormap::Ptr createDefaultInverted(int n)
Definition: colormappable.hh:67
MonochromeColormapHelper::setMonochromeColor
void setMonochromeColor(const Color &c) override
Definition: colormap-helpers.cc:92
MonochromeColormapHelper::numberOfColors
int numberOfColors
Definition: colormappable.hh:233
Colormappable::setMonochromeColor
virtual void setMonochromeColor(const Color &c)=0
ColormapHelperBase::getMonochromeColor
Color getMonochromeColor() override
Definition: colormap-helpers.cc:32
Colormappable::setColormap
virtual void setColormap(Colormap::Ptr colormap)=0
MonochromeColormapHelper::setTransparentBackground
void setTransparentBackground() override
Definition: colormap-helpers.cc:135
Interface
Definition: interface.hh:10
Colormappable::Ptr
boost::shared_ptr< Colormappable > Ptr
Definition: colormappable.hh:116
ColormapHelper::create
static Ptr create(int numberOfColors)
Definition: colormap-helpers.cc:55
ColormapHelperBase::setColormap
void setColormap(Colormap::Ptr colormap) override
Definition: colormap-helpers.cc:24
ColormapHelper
Definition: colormappable.hh:196
MonochromeColormapHelper::regenerateColormap
void regenerateColormap()
Definition: colormap-helpers.cc:108
ColormapHelperBase::setTransparentBackground
void setTransparentBackground() override
Definition: colormap-helpers.cc:40
ColormapHelperBase::disableTransparentBackground
void disableTransparentBackground() override
Definition: colormap-helpers.cc:42
MonochromeColormapHelper::getProperties
std::map< std::string, std::string > getProperties() override
Definition: colormap-helpers.cc:149
Colormappable::setTransparentBackground
virtual void setTransparentBackground()=0
Colormappable::disableTransparentBackground
virtual void disableTransparentBackground()=0
MonochromeColormapHelper::getTransparentBackground
bool getTransparentBackground() override
Definition: colormap-helpers.cc:147
MonochromeColormapHelper::MonochromeColormapHelper
MonochromeColormapHelper(int numberOfColors, bool inverted)
Definition: colormap-helpers.cc:82
ColormapHelper::createInverted
static Ptr createInverted(int numberOfColors)
Definition: colormap-helpers.cc:57
TRANSPARENT_BACKGROUND_PROPERTY_NAME
const std::string TRANSPARENT_BACKGROUND_PROPERTY_NAME
Definition: colormappable.hh:23
Color
Definition: color.hh:34
MonochromeColormapHelper
Definition: colormappable.hh:209
Colormap
Definition: colormappable.hh:28
Colormappable::WeakPtr
boost::weak_ptr< Colormappable > WeakPtr
Definition: colormappable.hh:117
Colormap::ConstPtr
boost::shared_ptr< const Colormap > ConstPtr
Definition: colormappable.hh:32
ColormapHelperBase::getTransparentBackground
bool getTransparentBackground() override
Definition: colormap-helpers.cc:44
MonochromeColormapHelper::getMonochromeColor
Color getMonochromeColor() override
Definition: colormap-helpers.cc:106