g4tools  5.4.0
style_colormap
Go to the documentation of this file.
1 // Copyright (C) 2010, Guy Barrand. All rights reserved.
2 // See the file tools.license for terms.
3 
4 #ifndef tools_sg_style_colormap
5 #define tools_sg_style_colormap
6 
7 #include "style_color"
8 
9 #include "../hls"
10 #include "../sto"
11 #include "../num2s"
12 #include "../S_STRING"
13 #include "../forit"
14 
15 #include <map>
16 
17 namespace tools {
18 namespace sg {
19 
20 class style_colormap : public std::map<unsigned int,style_color> {
21  typedef std::map<unsigned int,style_color> parent;
22 protected:
23  typedef std::map<unsigned int,style_color> map_t;
24 public:
26 public:
27  style_colormap():parent(){
28 #ifdef TOOLS_MEM
29  mem::increment(s_class().c_str());
30 #endif
31  }
32  virtual ~style_colormap(){
33 #ifdef TOOLS_MEM
34  mem::decrement(s_class().c_str());
35 #endif
36  }
37 public:
38  style_colormap(const style_colormap& a_from):parent(a_from){
39 #ifdef TOOLS_MEM
40  mem::increment(s_class().c_str());
41 #endif
42  }
44  parent::operator=(a_from);
45  return *this;
46  }
47 public:
48  bool get_color(unsigned int a_index,colorf& a_col) const {
49  map_t::const_iterator it = find(a_index);
50  if(it==end()) {
51  a_col.set_value(0.5F,0.5F,0.5F,1);
52  return false;
53  }
54  a_col = (*it).second.second;
55  return true;
56  }
57  bool get_color(const std::string& a_s,colorf& a_col) const {
58  tools_mforcit(unsigned int,style_color,*this,it) {
59  if((*it).second.first==a_s) {
60  a_col = (*it).second.second;
61  return true;
62  }
63  }
64  //we do not set a_col to something.
65  return false;
66  }
67  bool get_string_color(unsigned int a_index,std::string& a_s) const{
68  map_t::const_iterator it = find(a_index);
69  if(it==end()) {a_s.clear();return false;}
70  colorf c = (*it).second.second;
71 
72  char ss[192]; //3*64 = 192
73  snpf(ss,sizeof(ss),"%g %g %g",c[0],c[1],c[2]);
74  a_s = std::string(ss);
75  return true;
76  }
77 public:
78  void add(const style_color& a_color) {
79  (*this)[uint32((*this).size())] = a_color;
80  }
81 };
82 
83 }}
84 
85 #include "../colors"
86 
87 namespace tools {
88 namespace sg {
89 
91 public:
92  TOOLS_CLASS_STRING(default)
93 public:
94 #define STYLE_COLORMAP_ADD(a__name) \
95  tmp.set_name(#a__name);\
96  set_color_##a__name(tmp);\
97  add(tmp);
98 
100  style_color tmp;
101  STYLE_COLORMAP_ADD(aquamarine)
102  STYLE_COLORMAP_ADD(mediumaquamarine)
103  STYLE_COLORMAP_ADD(black)
104  STYLE_COLORMAP_ADD(blue)
105  STYLE_COLORMAP_ADD(cadetblue)
106  STYLE_COLORMAP_ADD(cornflowerblue)
107  STYLE_COLORMAP_ADD(darkslateblue)
108  STYLE_COLORMAP_ADD(lightblue)
109  STYLE_COLORMAP_ADD(lightsteelblue)
110  STYLE_COLORMAP_ADD(mediumblue)
111 
112  STYLE_COLORMAP_ADD(mediumslateblue)
113  STYLE_COLORMAP_ADD(midnightblue)
114  STYLE_COLORMAP_ADD(navyblue)
115  STYLE_COLORMAP_ADD(navy)
116  STYLE_COLORMAP_ADD(skyblue)
117  STYLE_COLORMAP_ADD(slateblue)
118  STYLE_COLORMAP_ADD(steelblue)
119  STYLE_COLORMAP_ADD(coral)
120  STYLE_COLORMAP_ADD(cyan)
121  STYLE_COLORMAP_ADD(firebrick)
122 
123  STYLE_COLORMAP_ADD(brown)
124  STYLE_COLORMAP_ADD(gold)
125  STYLE_COLORMAP_ADD(goldenrod)
126  STYLE_COLORMAP_ADD(green)
127  STYLE_COLORMAP_ADD(darkgreen)
128  STYLE_COLORMAP_ADD(darkolivegreen)
129  STYLE_COLORMAP_ADD(forestgreen)
130  STYLE_COLORMAP_ADD(limegreen)
131  STYLE_COLORMAP_ADD(mediumseagreen)
132  STYLE_COLORMAP_ADD(mediumspringgreen)
133 
134  STYLE_COLORMAP_ADD(palegreen)
135  STYLE_COLORMAP_ADD(seagreen)
136  STYLE_COLORMAP_ADD(springgreen)
137  STYLE_COLORMAP_ADD(yellowgreen)
138  STYLE_COLORMAP_ADD(darkslategrey)
139  STYLE_COLORMAP_ADD(dimgrey)
140  STYLE_COLORMAP_ADD(lightgrey)
141  STYLE_COLORMAP_ADD(grey)
142  STYLE_COLORMAP_ADD(khaki)
143  STYLE_COLORMAP_ADD(magenta)
144 
145  STYLE_COLORMAP_ADD(maroon)
146  STYLE_COLORMAP_ADD(orange)
147  STYLE_COLORMAP_ADD(orchid)
148  STYLE_COLORMAP_ADD(darkorchid)
149  STYLE_COLORMAP_ADD(mediumorchid)
150  STYLE_COLORMAP_ADD(pink)
151  STYLE_COLORMAP_ADD(plum)
152  STYLE_COLORMAP_ADD(red)
153  STYLE_COLORMAP_ADD(indianred)
154  STYLE_COLORMAP_ADD(mediumvioletred)
155 
156  STYLE_COLORMAP_ADD(orangered)
157  STYLE_COLORMAP_ADD(violetred)
158  STYLE_COLORMAP_ADD(salmon)
159  STYLE_COLORMAP_ADD(sienna)
160  STYLE_COLORMAP_ADD(tan)
161  STYLE_COLORMAP_ADD(thistle)
162  STYLE_COLORMAP_ADD(turquoise)
163  STYLE_COLORMAP_ADD(darkturquoise)
164  STYLE_COLORMAP_ADD(mediumturquoise)
165  STYLE_COLORMAP_ADD(violet)
166 
167  STYLE_COLORMAP_ADD(blueviolet)
168  STYLE_COLORMAP_ADD(wheat)
169  STYLE_COLORMAP_ADD(white)
170  STYLE_COLORMAP_ADD(yellow)
171  STYLE_COLORMAP_ADD(greenyellow)
172  }
173 #undef STYLE_COLORMAP_ADD
174 };
175 
177  //enum EColor {kWhite,kBlack,kRed,kGreen,kBlue,kYellow,kMagenta,kCyan};
178  //0 1 2 3 4 5 6 7
179 
180 
181  // ROOT-5.24.00b/Rtypes.h
182  enum EColor { kWhite =0, kBlack =1, kGray=920,
183  kRed =632, kGreen =416, kBlue=600, kYellow=400, kMagenta=616, kCyan=432,
184  kOrange=800, kSpring=820, kTeal=840, kAzure =860, kViolet =880, kPink=900};
185 
186 public:
188  // ROOT-4.00.08/TApplication.cxx/InitializeColors
189  // ROOT-5.18.00d/TColor.cxx/InitializeColors
190  //resize(51+50+50+50); //201
191 
192  // from index 0 to 50 : default colors.
193  // from index 51 to 100 : pretty.
194  // from index 101 to 150 : dark version of default colors.
195  // from index 151 to 200 : bright version of default colors.
196 
197  //base/inc/Gtypes.h
198 
199  new_TColor(kWhite,1,1,1,"background");
200  new_TColor(kBlack,0,0,0,"black");
201  new_TColor(2,1,0,0,"red");
202  new_TColor(3,0,1,0,"green");
203  new_TColor(4,0,0,1,"blue");
204  new_TColor(5,1,1,0,"yellow");
205  new_TColor(6,1,0,1,"magenta");
206  new_TColor(7,0,1,1,"cyan");
207  new_TColor(10,0.999,0.999,0.999,"white");
208  new_TColor(11,0.754,0.715,0.676,"editcol");
209 
210  // The color white above is defined as being nearly white.
211  // Sets the associated dark color also to white.
212  //new_TColor(110,0.999,0.999,.999,"Color110");
213 
214  // Initialize Custom colors
215  new_TColor(20,0.8,0.78,0.67,"Color20");
216  new_TColor(31,0.54,0.66,0.63,"Color31");
217  new_TColor(41,0.83,0.81,0.53,"Color41");
218  new_TColor(30,0.52,0.76,0.64,"Color30");
219  new_TColor(32,0.51,0.62,0.55,"Color32");
220  new_TColor(24,0.70,0.65,0.59,"Color24");
221  new_TColor(21,0.8,0.78,0.67,"Color21");
222  new_TColor(47,0.67,0.56,0.58,"Color47");
223  new_TColor(35,0.46,0.54,0.57,"Color35");
224  new_TColor(33,0.68,0.74,0.78,"Color33");
225  new_TColor(39,0.5,0.5,0.61,"Color39");
226  new_TColor(37,0.43,0.48,0.52,"Color37");
227  new_TColor(38,0.49,0.6,0.82,"Color38");
228  new_TColor(36,0.41,0.51,0.59,"Color36");
229  new_TColor(49,0.58,0.41,0.44,"Color49");
230  new_TColor(43,0.74,0.62,0.51,"Color43");
231  new_TColor(22,0.76,0.75,0.66,"Color22");
232  new_TColor(45,0.75,0.51,0.47,"Color45");
233  new_TColor(44,0.78,0.6,0.49,"Color44");
234  new_TColor(26,0.68,0.6,0.55,"Color26");
235  new_TColor(28,0.53,0.4,0.34,"Color28");
236  new_TColor(25,0.72,0.64,0.61,"Color25");
237  new_TColor(27,0.61,0.56,0.51,"Color27");
238  new_TColor(23,0.73,0.71,0.64,"Color23");
239  new_TColor(42,0.87,0.73,0.53,"Color42");
240  new_TColor(46,0.81,0.37,0.38,"Color46");
241  new_TColor(48,0.65,0.47,0.48,"Color48");
242  new_TColor(34,0.48,0.56,0.6,"Color34");
243  new_TColor(40,0.67,0.65,0.75,"Color40");
244  new_TColor(29,0.69,0.81,0.78,"Color29");
245 
246  // Initialize some additional greyish non saturated colors
247 #define TOOLS_SG_STYLE_COLORMAP_ADD_TCOLOR(a__i,a__name) \
248  new_TColor(a__i,get_color_ROOT_##a__name<colorf>(),#a__name);
249 
261 
262 #undef TOOLS_SG_STYLE_COLORMAP_ADD_TCOLOR
263 
264  // Initialize the Pretty Palette Spectrum Violet->Red
265  // The color model used here is based on the HLS model which
266  // is much more suitable for creating palettes than RGB.
267  // Fixing the saturation and lightness we can scan through the
268  // spectrum of visible light by using "hue" alone.
269  // In Root hue takes values from 0 to 360.
270  {float saturation = 1;
271  float lightness = 0.5;
272  float MaxHue = 280;
273  float MinHue = 0;
274  unsigned int MaxPretty = 50;
275 
276  // from index 51 to 100.
277  float r,g,b,hue;
278  std::string head("Color");
279  for(unsigned int i=0 ; i<MaxPretty ; i++) {
280  hue = MaxHue-(i+1)*((MaxHue-MinHue)/MaxPretty);
281  hls_to_rgb(hue, lightness, saturation, r, g, b);
282  new_TColor(i+51, r, g, b,head,i+51);
283  }}
284 
285  double h,l,s,r,g,b;
286 
287  // dark colors (index 101 to 150) :
288  // NOTE : 100 = "dark black" would overlap with "pretty 49" !
289  // then start to 1+100.
290  {for(unsigned int i=1 ; i<=50 ; i++) {
291  map_t::const_iterator it = find(i);
292  //if(it==end()) {}
293  const std::string& nam = (*it).second.first;
294  const colorf& col = (*it).second.second;
295  rgb_to_hls<double>(col.r(),col.g(),col.b(),h,l,s);
296  hls_to_rgb<double>(h,0.7*l,s, r, g, b);
297  new_TColor(i+100, r, g, b, nam+"_dark");
298  }}
299 
300  // bright colors (index 151 to 200) :
301  // NOTE : 150 = "bright black" would overlap with "dark 50" !
302  // then start to 1+150.
303  {for(unsigned int i=1 ; i<=50 ; i++) {
304  map_t::const_iterator it = find(i);
305  //if(it==end()) {}
306  const std::string& nam = (*it).second.first;
307  const colorf& col = (*it).second.second;
308  rgb_to_hls<double>(col.r(),col.g(),col.b(),h,l,s);
309  hls_to_rgb<double>(h,1.2*l,s, r, g, b);
310  new_TColor(i+150, r, g, b, nam+"_bright");
311  }}
312 
313  // Initialize special colors for x3d
314  // from 201 to 228=200+4*7 : 7*4 = 28.
315  {std::string head("Color");
316  unsigned int index;
317  for(unsigned int i = 1; i <= 7; i++) {
318  map_t::const_iterator it = find(i);
319  //if(it==end()) {}
320  const colorf& col = (*it).second.second;
321  r = col.r();
322  g = col.r();
323  b = col.r();
324  if (i == 1) { r = 0.6; g = 0.6; b = 0.6; }
325 
326  if (r == 1) r = 0.9;
327  if (r == 0) r = 0.1;
328 
329  if (g == 1) g = 0.9;
330  if (g == 0) g = 0.1;
331 
332  if (b == 1) b = 0.9;
333  if (b == 0) b = 0.1;
334 
335  rgb_to_hls(r,g,b,h,l,s);
336 
337  hls_to_rgb(h,0.6*l,s,r,g,b);
338  index = 200+4*i-3;
339  new_TColor(index,r,g,b,head,index);
340 
341  hls_to_rgb(h,0.8*l,s,r,g,b);
342  index = 200+4*i-2;
343  new_TColor(index,r,g,b,head,index);
344 
345  hls_to_rgb(h,1.2*l,s,r,g,b);
346  index = 200+4*i-1;
347  new_TColor(index,r,g,b,head,index);
348 
349  hls_to_rgb(h,1.4*l,s,r,g,b);
350  index = 200+4*i;
351  new_TColor(index,r,g,b,head,index);
352  }}
353 
355  }
356 
357 protected:
358  void new_TColor(unsigned int a_i,
359  double a_r,double a_g,double a_b,
360  const std::string& a_n) {
361  (*this)[a_i] = style_color(a_n,float(a_r),float(a_g),float(a_b));
362  }
363  void new_TColor(unsigned int a_i,
364  double a_r,double a_g,double a_b,
365  const std::string& a_head,unsigned int a_index) {
366  std::string stmp;
367  if(!num2s(a_index,stmp)) {}
368  new_TColor(a_i,a_r,a_g,a_b,a_head+stmp);
369  }
370  void new_TColor(unsigned int a_i,const colorf& a_color,const std::string& a_n) {
371  (*this)[a_i] = style_color(a_n,a_color.r(),a_color.g(),a_color.b());
372  }
373 
374  void create_colors_circle(unsigned int a_offset,
375  const std::string& a_name,
376  unsigned char a_rgb[]) {
377  // Create the "circle" colors in the Color Wheel
378  for(unsigned int n=0;n<15;n++) {
379  int colorn = a_offset+n-10;
380  if(colorn<0) continue;
381  if(n>10) {
382  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name+"+",n-10);
383  } else if (n<10) {
384  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name+"-",10-n);
385  } else {
386  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name);
387  }
388  //color->SetTitle(color->AsHexString());
389  }
390  }
391 
392  void create_colors_rectangle(unsigned int a_offset,
393  const std::string& a_name,
394  unsigned char a_rgb[]) {
395  // Create the "rectangular" colors in the Color Wheel
396  for (unsigned int n=0;n<20;n++) {
397  int colorn = a_offset+n-9;
398  if(colorn<0) continue;
399  if(n>9) {
400  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name+"+",n-9);
401  } else if(n<9) {
402  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name+"-",9-n);
403  } else {
404  new_TColor(colorn,a_rgb[3*n]/255.,a_rgb[3*n+1]/255.,a_rgb[3*n+2]/255.,a_name);
405  }
406  //color->SetTitle(color->AsHexString());
407  }
408  }
409 
411  // Static function steering the creation of all colors
412  // in the ROOT Color Wheel
413  typedef unsigned char UChar_t;
414  UChar_t magenta[46]= {255,204,255
415  ,255,153,255, 204,153,204
416  ,255,102,255, 204,102,204, 153,102,153
417  ,255, 51,255, 204, 51,204, 153, 51,153, 102, 51,102
418  ,255, 0,255, 204, 0,204, 153, 0,153, 102, 0,102, 51, 0, 51};
419 
420  UChar_t red[46] = {255,204,204
421  ,255,153,153, 204,153,153
422  ,255,102,102, 204,102,102, 153,102,102
423  ,255, 51, 51, 204, 51, 51, 153, 51, 51, 102, 51, 51
424  ,255, 0, 0, 204, 0, 0, 153, 0, 0, 102, 0, 0, 51, 0, 0};
425 
426  UChar_t yellow[46] = {255,255,204
427  ,255,255,153, 204,204,153
428  ,255,255,102, 204,204,102, 153,153,102
429  ,255,255, 51, 204,204, 51, 153,153, 51, 102,102, 51
430  ,255,255, 0, 204,204, 0, 153,153, 0, 102,102, 0, 51, 51, 0};
431 
432  UChar_t green[46] = {204,255,204
433  ,153,255,153, 153,204,153
434  ,102,255,102, 102,204,102, 102,153,102
435  , 51,255, 51, 51,204, 51, 51,153, 51, 51,102, 51
436  , 0,255, 0, 0,204, 0, 0,153, 0, 0,102, 0, 0, 51, 0};
437 
438  UChar_t cyan[46] = {204,255,255
439  ,153,255,255, 153,204,204
440  ,102,255,255, 102,204,204, 102,153,153
441  , 51,255,255, 51,204,204, 51,153,153, 51,102,102
442  , 0,255,255, 0,204,204, 0,153,153, 0,102,102, 0, 51, 51};
443 
444  UChar_t blue[46] = {204,204,255
445  ,153,153,255, 153,153,204
446  ,102,102,255, 102,102,204, 102,102,153
447  , 51, 51,255, 51, 51,204, 51, 51,153, 51, 51,102
448  , 0, 0,255, 0, 0,204, 0, 0,153, 0, 0,102, 0, 0, 51};
449 
450  UChar_t pink[60] = {
451  255, 51,153, 204, 0,102, 102, 0, 51, 153, 0, 51, 204, 51,102
452  ,255,102,153, 255, 0,102, 255, 51,102, 204, 0, 51, 255, 0, 51
453  ,255,153,204, 204,102,153, 153, 51,102, 153, 0,102, 204, 51,153
454  ,255,102,204, 255, 0,153, 204, 0,153, 255, 51,204, 255, 0,153};
455 
456  UChar_t orange[60]={
457  255,204,153, 204,153,102, 153,102, 51, 153,102, 0, 204,153, 51
458  ,255,204,102, 255,153, 0, 255,204, 51, 204,153, 0, 255,204, 0
459  ,255,153, 51, 204,102, 0, 102, 51, 0, 153, 51, 0, 204,102, 51
460  ,255,153,102, 255,102, 0, 255,102, 51, 204, 51, 0, 255, 51, 0};
461 
462  UChar_t spring[60]={
463  153,255, 51, 102,204, 0, 51,102, 0, 51,153, 0, 102,204, 51
464  ,153,255,102, 102,255, 0, 102,255, 51, 51,204, 0, 51,255, 0
465  ,204,255,153, 153,204,102, 102,153, 51, 102,153, 0, 153,204, 51
466  ,204,255,102, 153,255, 0, 204,255, 51, 153,204, 0, 204,255, 0};
467 
468  UChar_t teal[60] = {
469  153,255,204, 102,204,153, 51,153,102, 0,153,102, 51,204,153
470  ,102,255,204, 0,255,102, 51,255,204, 0,204,153, 0,255,204
471  , 51,255,153, 0,204,102, 0,102, 51, 0,153, 51, 51,204,102
472  ,102,255,153, 0,255,153, 51,255,102, 0,204, 51, 0,255, 51};
473 
474  UChar_t azure[60] ={
475  153,204,255, 102,153,204, 51,102,153, 0, 51,153, 51,102,204
476  ,102,153,255, 0,102,255, 51,102,255, 0, 51,204, 0, 51,255
477  , 51,153,255, 0,102,204, 0, 51,102, 0,102,153, 51,153,204
478  ,102,204,255, 0,153,255, 51,204,255, 0,153,204, 0,204,255};
479 
480  UChar_t violet[60]={
481  204,153,255, 153,102,204, 102, 51,153, 102, 0,153, 153, 51,204
482  ,204,102,255, 153, 0,255, 204, 51,255, 153, 0,204, 204, 0,255
483  ,153, 51,255, 102, 0,204, 51, 0,102, 51, 0,153, 102, 51,204
484  ,153,102,255, 102, 0,255, 102, 51,255, 51, 0,204, 51, 0,255};
485 
486  create_colors_circle(kMagenta,"kMagenta",magenta);
487  create_colors_circle(kRed, "kRed", red);
488  create_colors_circle(kYellow, "kYellow", yellow);
489  create_colors_circle(kGreen, "kGreen", green);
490  create_colors_circle(kCyan, "kCyan", cyan);
491  create_colors_circle(kBlue, "kBlue", blue);
492 
493  create_colors_rectangle(kPink, "kPink", pink);
494  create_colors_rectangle(kOrange,"kOrange",orange);
495  create_colors_rectangle(kSpring,"kSpring",spring);
496  create_colors_rectangle(kTeal, "kTeal", teal);
497  create_colors_rectangle(kAzure, "kAzure", azure);
498  create_colors_rectangle(kViolet,"kViolet",violet);
499 
500  // Create the Gray scale colors in the Color Wheel
501  new_TColor(kGray ,204./255.,204./255.,204./255.,"kGray");
502  new_TColor(kGray+1,153./255.,153./255.,153./255.,"kGray+1");
503  new_TColor(kGray+2,102./255.,102./255.,102./255.,"kGray+2");
504  new_TColor(kGray+3, 51./255., 51./255., 51./255.,"kGray+3");
505  }
506 
507 };
508 
510 public:
512  add(style_color("White",colorf(1.00f, 1.00f, 1.00f)));
513  add(style_color("Black",colorf(0.00f, 0.00f, 0.00f)));
514  add(style_color("PeachPuff",colorf(1.00f, 0.85f, 0.70f)));
515  add(style_color("Peach",colorf(0.90f, 0.50f, 0.30f)));
516  add(style_color("SlateGrey",colorf(0.44f, 0.50f, 0.56f)));
517  add(style_color("CornflowerBlue",colorf(0.39f, 0.58f, 0.93f)));
518  add(style_color("Aquamarine",colorf(0.50f, 0.50f, 0.83f)));
519  add(style_color("LawnGreen",colorf(0.49f, 0.92f, 0.00f)));
520  add(style_color("DarkKhaki",colorf(0.74f, 0.71f, 0.42f)));
521  add(style_color("Gold",colorf(1.00f, 0.84f, 0.00f)));
522  add(style_color("IndianRed",colorf(0.80f, 0.36f, 0.36f)));
523  add(style_color("SaddleBrown",colorf(0.55f, 0.27f, 0.07f)));
524  add(style_color("DeepPink",colorf(1.00f, 0.08f, 0.56f)));
525  }
526 };
527 
528 }}
529 
530 
531 #include "../words"
532 
533 namespace tools {
534 namespace sg {
535 
536 typedef std::map<std::string,style_colormap> cmaps_t;
537 
538 inline bool to_ulong(const std::string& a_s,unsigned long& a_v){
539  a_v = 0L;
540  if(::sscanf(a_s.c_str(),"%lx",&a_v)!=1) {
541  if(::sscanf(a_s.c_str(),"%lu",&a_v)!=1) {
542  a_v = 0L;
543  return false;
544  }
545  }
546  return true;
547 }
548 
549 inline bool find_color(const cmaps_t& a_cmaps,const std::string& a_s,colorf& a_col){
550  //NOTE : if ret false, we do not set a_col to something.
551 
552  std::string::size_type pos_slash = a_s.rfind('/');
553  if(pos_slash!=std::string::npos) { //<cmap>/<color name>
554  std::string cmap = a_s.substr(0,pos_slash);
555  std::string cnam = a_s.substr(pos_slash+1,a_s.size()-(pos_slash+1));
556  cmaps_t::const_iterator it = a_cmaps.find(cmap);
557  if(it==a_cmaps.end()) return false;
558  return (*it).second.get_color(cnam,a_col);
559 
560  } else {
561 
562  if( (a_s.size()==7) && (a_s[0]=='#') ) {
563  // #RRGGBB format :
564  // 1 3 5
565  unsigned long rr,gg,bb;
566 
567  {std::string s("0x");
568  s += a_s.substr(1,2);
569  if(!to_ulong(s,rr)) return false;}
570 
571  {std::string s("0x");
572  s += a_s.substr(3,2);
573  if(!to_ulong(s,gg)) return false;}
574 
575  {std::string s("0x");
576  s += a_s.substr(5,2);
577  if(!to_ulong(s,bb)) return false;}
578 
579  a_col = colorf(((float)rr)/255,((float)gg)/255,((float)bb)/255);
580  return true;
581  }
582 
583  //a_s of the form : <real:r> <real:g> <real:b>
584  //a_s of the form : <real:r> <real:g> <real:b> <real:a>
585 
586  {std::vector<std::string> ws;
587  words(a_s," ",false,ws);
588  if(ws.size()==3) {
589  float r,g,b;
590  if( to<float>(ws[0],r) && ((0<=r)&&(r<=1)) &&
591  to<float>(ws[1],g) && ((0<=g)&&(g<=1)) &&
592  to<float>(ws[2],b) && ((0<=b)&&(b<=1)) ){
593  a_col = colorf(r,g,b);
594  return true;
595  }
596 
597  } else if(ws.size()==4) {
598  float r,g,b,a;
599  if( to<float>(ws[0],r) && ((0<=r)&&(r<=1)) &&
600  to<float>(ws[1],g) && ((0<=g)&&(g<=1)) &&
601  to<float>(ws[2],b) && ((0<=b)&&(b<=1)) &&
602  to<float>(ws[3],a) && ((0<=a)&&(a<=1)) ){
603  a_col = colorf(r,g,b,a);
604  return true;
605  }
606 
607  }}
608 
609  // search in default colormap :
610  {cmaps_t::const_iterator it = a_cmaps.find(style_default_colormap::s_default());
611  if(it!=a_cmaps.end()) {
612  if((*it).second.get_color(a_s,a_col)) return true;
613  }}
614 
615  }
616 
617  return false;
618 }
619 
620 }}
621 
622 #endif
623 
624 
625 
tools::sg::style_colormap::get_color
bool get_color(const std::string &a_s, colorf &a_col) const
Definition: style_colormap:57
tools::sg::style_colormap::~style_colormap
virtual ~style_colormap()
Definition: style_colormap:32
tools::sg::find_color
bool find_color(const cmaps_t &a_cmaps, const std::string &a_s, colorf &a_col)
Definition: style_colormap:549
tools::sg::style_ROOT_colormap::new_TColor
void new_TColor(unsigned int a_i, double a_r, double a_g, double a_b, const std::string &a_n)
Definition: style_colormap:358
TOOLS_CLASS_STRING
#define TOOLS_CLASS_STRING(a_name)
Definition: S_STRING:11
style_color
tools::colorf
Definition: colorf:11
tools::sg::style_ROOT_colormap::create_color_wheel
void create_color_wheel()
Definition: style_colormap:410
tools::find
bool find(const std::map< K, V > &a_map, const K &a_key, V &a_value)
Definition: mapmanip:86
tools::sg::style_ROOT_colormap::create_colors_rectangle
void create_colors_rectangle(unsigned int a_offset, const std::string &a_name, unsigned char a_rgb[])
Definition: style_colormap:392
tools::colorf::g
float g() const
Definition: colorf:33
TOOLS_SCLASS
#define TOOLS_SCLASS(a_name)
Definition: S_STRING:41
STYLE_COLORMAP_ADD
#define STYLE_COLORMAP_ADD(a__name)
Definition: style_colormap:94
tools::rgb_to_hls
void rgb_to_hls(T rr, T gg, T bb, T &hue, T &light, T &satur)
Definition: hls:55
tools::snpf
int snpf(char *a_s, size_t a_n, const char *a_fmt,...)
Definition: snpf:27
tools::sg::cmaps_t
std::map< std::string, style_colormap > cmaps_t
Definition: style_colormap:536
tools::sg::style_colormap
Definition: style_colormap:20
tools::sg::style_colormap::map_t
std::map< unsigned int, style_color > map_t
Definition: style_colormap:23
tools::sg::style_colormap::add
void add(const style_color &a_color)
Definition: style_colormap:78
tools::sg::style_default_colormap
Definition: style_colormap:90
tools::sg::style_default_colormap::style_default_colormap
style_default_colormap()
Definition: style_colormap:99
tools::sg::style_colormap::operator=
style_colormap & operator=(const style_colormap &a_from)
Definition: style_colormap:43
tools
inlined C code : ///////////////////////////////////
Definition: aida_ntuple:26
tools::words
void words(const std::string &a_string, const std::string &a_sep, bool a_take_empty, std::vector< std::string > &a_words, bool a_clear=true)
Definition: words:12
tools::sg::style_colormap::get_color
bool get_color(unsigned int a_index, colorf &a_col) const
Definition: style_colormap:48
tools_mforcit
#define tools_mforcit(a__K, a__V, a__m, a__it)
Definition: forit:49
tools::sg::style_colormap::style_colormap
style_colormap()
Definition: style_colormap:27
tools::vec4::set_value
void set_value(const T &a0, const T &a1, const T &a2, const T &a3)
Definition: vec4:100
tools::waxml::end
void end(std::ostream &a_writer)
Definition: begend:31
tools::sg::style_colormap::get_string_color
bool get_string_color(unsigned int a_index, std::string &a_s) const
Definition: style_colormap:67
tools::sg::style_povama_colormap::style_povama_colormap
style_povama_colormap()
Definition: style_colormap:511
tools::sg::style_ROOT_colormap::new_TColor
void new_TColor(unsigned int a_i, const colorf &a_color, const std::string &a_n)
Definition: style_colormap:370
tools::colorf::r
float r() const
Definition: colorf:32
tools::hls_to_rgb
void hls_to_rgb(T hue, T light, T satur, T &a_r, T &a_g, T &a_b)
Definition: hls:24
TOOLS_SG_STYLE_COLORMAP_ADD_TCOLOR
#define TOOLS_SG_STYLE_COLORMAP_ADD_TCOLOR(a__i, a__name)
tools::sg::style_povama_colormap
Definition: style_colormap:509
tools::sg::style_color
Definition: style_color:17
tools::sg::style_ROOT_colormap
Definition: style_colormap:176
tools::sg::to_ulong
bool to_ulong(const std::string &a_s, unsigned long &a_v)
Definition: style_colormap:538
tools::sg::style_colormap::style_colormap
style_colormap(const style_colormap &a_from)
Definition: style_colormap:38
tools::uint32
unsigned int uint32
Definition: typedefs:71
tools::sg::style_ROOT_colormap::style_ROOT_colormap
style_ROOT_colormap()
Definition: style_colormap:187
tools::sg::style_ROOT_colormap::new_TColor
void new_TColor(unsigned int a_i, double a_r, double a_g, double a_b, const std::string &a_head, unsigned int a_index)
Definition: style_colormap:363
tools::num2s
bool num2s(unsigned short a_value, std::string &a_s)
Definition: num2s:26
tools::sg::style_ROOT_colormap::create_colors_circle
void create_colors_circle(unsigned int a_offset, const std::string &a_name, unsigned char a_rgb[])
Definition: style_colormap:374
tools::colorf::b
float b() const
Definition: colorf:34