Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/externals/g4tools/include/tools/hls

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /externals/g4tools/include/tools/hls (Version 11.3.0) and /externals/g4tools/include/tools/hls (Version 9.0)


  1 // Copyright (C) 2010, Guy Barrand. All rights    
  2 // See the file tools.license for terms.          
  3                                                   
  4 #ifndef tools_hls                                 
  5 #define tools_hls                                 
  6                                                   
  7 namespace tools {                                 
  8                                                   
  9 //T is float or double.                           
 10                                                   
 11 template <class T>                                
 12 inline T hls_to_rgb2(T rn1,T rn2,T huei) {        
 13   // taken from CERN-ROOT/TColor.                 
 14   T hue = huei;                                   
 15   if (hue > 360) hue = hue - 360;                 
 16   if (hue < 0)   hue = hue + 360;                 
 17   if (hue < 60 ) return rn1 + (rn2-rn1)*hue/60    
 18   if (hue < 180) return rn2;                      
 19   if (hue < 240) return rn1 + (rn2-rn1)*(240-h    
 20   return rn1;                                     
 21 }                                                 
 22                                                   
 23 template <class T>                                
 24 inline void hls_to_rgb(T hue,T light,T satur,T    
 25   // taken from CERN-ROOT/TColor.                 
 26   // Static method to compute RGB from HLS. Th    
 27   // and h is between [0,360]. The returned r,    
 28                                                   
 29   T rh, rl, rs, rm1, rm2;                         
 30   rh = rl = rs = 0;                               
 31                                                   
 32   if (hue   > 0) rh = hue;                        
 33   if (rh > 360) rh = 360;                         
 34                                                   
 35   if (light > 0) rl = light;                      
 36   if (rl > 1)   rl = 1;                           
 37                                                   
 38   if (satur > 0) rs = satur;                      
 39   if (rs > 1)   rs = 1;                           
 40                                                   
 41   if (rl <= T(0.5)) {                             
 42     rm2 = rl*(1 + rs);                            
 43   } else {                                        
 44     rm2 = rl + rs - rl*rs;                        
 45   }                                               
 46   rm1 = 2*rl - rm2;                               
 47                                                   
 48   if (!rs) { a_r = rl; a_g = rl; a_b = rl; ret    
 49   a_r = hls_to_rgb2(rm1, rm2, rh+120);            
 50   a_g = hls_to_rgb2(rm1, rm2, rh);                
 51   a_b = hls_to_rgb2(rm1, rm2, rh-120);            
 52 }                                                 
 53                                                   
 54 template <class T>                                
 55 inline void rgb_to_hls(T rr,T gg,T bb,T& hue,T    
 56   // The r,g,b triplet is between                 
 57   // [0,1], hue is between [0,360], light and     
 58                                                   
 59   T rnorm, gnorm, bnorm, minval, maxval, msum,    
 60   minval = maxval = 0;                            
 61   cr = cg = cb = 0;                               
 62                                                   
 63   if (rr > 0) cr = rr;                            
 64   if (cr > 1) cr = 1;                             
 65                                                   
 66   if (gg > 0) cg = gg;                            
 67   if (cg > 1) cg = 1;                             
 68                                                   
 69   if (bb > 0) cb = bb;                            
 70   if (cb > 1) cb = 1;                             
 71                                                   
 72   minval = cr;                                    
 73   if (cg < minval) minval = cg;                   
 74   if (cb < minval) minval = cb;                   
 75   maxval = cr;                                    
 76   if (cg > maxval) maxval = cg;                   
 77   if (cb > maxval) maxval = cb;                   
 78                                                   
 79   rnorm = gnorm = bnorm = 0;                      
 80   mdiff = maxval - minval;                        
 81   msum  = maxval + minval;                        
 82   light = T(0.5) * msum;                          
 83   if (maxval != minval) {                         
 84     rnorm = (maxval - cr)/mdiff;                  
 85     gnorm = (maxval - cg)/mdiff;                  
 86     bnorm = (maxval - cb)/mdiff;                  
 87   } else {                                        
 88     satur = hue = 0;                              
 89     return;                                       
 90   }                                               
 91                                                   
 92   if (light < T(0.5))                             
 93     satur = mdiff/msum;                           
 94   else                                            
 95     satur = mdiff/(2 - msum);                     
 96                                                   
 97   if (cr == maxval)                               
 98     hue = 60 * (6 + bnorm - gnorm);               
 99   else if (cg == maxval)                          
100     hue = 60 * (2 + rnorm - bnorm);               
101   else                                            
102     hue = 60 * (4 + gnorm - rnorm);               
103                                                   
104   if (hue > 360)                                  
105     hue = hue - 360;                              
106 }                                                 
107                                                   
108                                                   
109 }                                                 
110                                                   
111 #endif