color.C

Go to the documentation of this file.
00001 
00006 #ifdef HAVE_CONFIG_H
00007 #include <tumble-conf.h>
00008 #endif /* HAVE_CONFIG_H */
00009 
00010 #include "color.h"
00011 
00012 using namespace std;
00013 
00014 Color RED( 1.0, 0.0, 0.0 );
00015 Color BLUE( 0.0, 0.0, 1.0 );
00016 Color GREEN( 0.0, 1.0, 0.0 );
00017 Color YELLOW(1.0, 1.0, 0.0);
00018 Color CYAN(0.0,1.0,1.0);
00019 Color MAGENTA(1.0,0.0,1.0);
00020 Color WHITE(1.0, 1.0, 1.0);
00021 Color BLACK(0.0,0.0,0.0);
00022 Color GRAY1(0.2, 0.2, 0.2);
00023 Color GRAY2(0.4, 0.4, 0.4);
00024 Color GRAY3(0.6, 0.6, 0.6);
00025 Color GRAY4(0.8, 0.8, 0.8);
00026 
00027 Color DIMYELLOW(0.2, 0.2, 0.0);
00028 Color DIMCYAN(0.0, 0.2, 0.2);
00029 Color DIMMAGENTA(0.2, 0.0, 0.2);
00030 Color LIGHTYELLOW(1.0,1.0,0.5);
00031 Color PINK1(1.0,0.6,0.6);
00032 Color PINK2(1.0,0.3,0.3);
00033 Color DARKRED(0.8,0.0,0.0);
00034 Color DARKRED2(0.4, 0.0, 0.0);
00035 
00036 map<int, Color> opengl_color_map;
00037 //map<int, Color> eps_rgb_map;
00038 //map<int, float> eps_grayscale_map;
00039 
00040 bool Color::is_valid() const
00041 {
00042     if( v[0] < 0.0 || v[0] > 1.0 ) return false;
00043     if( v[1] < 0.0 || v[1] > 1.0 ) return false;
00044     if( v[2] < 0.0 || v[2] > 1.0 ) return false;
00045     return true;
00046 }
00047 
00063 Color spectrum_color(double data, double data_min, double data_max)
00064 {
00065     double norm;
00066     double variation = data_max - data_min;
00067 
00068     if(variation == 0.0) norm = 0.0;
00069     else norm= 1.0/variation;
00070 
00071     data = (data - data_min) * norm;
00072 
00073     Color LBLUE(0.5, 0.5, 1.0);
00074 
00075     int num_breaks = 7;
00076     Color colors[7] = {BLACK, MAGENTA, BLUE, CYAN, GREEN, YELLOW, RED};
00077     double breaks[7]= {0.0, 0.16666, 0.333333, 0.5, 0.6666666, 0.83333333, 1.0};
00078 
00079     /*
00080       Multiscale colors
00081       There should probably be a parameter to set these
00082     int num_breaks = 10;
00083     Color colors[10] =  {BLACK, MAGENTA,BLUE,   CYAN,   GREEN,  YELLOW,RED,   MAGENTA,LBLUE, WHITE};
00084     double breaks[10] = {0.0,   1.0E-12,5.0E-12,4.0E-11,2.0E-10,2.0E-9,9.0E-9,1.0E-4, 9.0E-4,1.0E-2};
00085     */
00086 
00087     Color rval = BLACK;
00088 
00089     if (data <= breaks[0]) return colors[0];
00090     if (data >= breaks[num_breaks-1]) return colors[num_breaks-1];
00091 
00092     int glb = 0; // greatest lower bound
00093     for (int i = 1; i<num_breaks-1; i++)
00094       {
00095     if (breaks[i] <= data) glb = i;
00096       }
00097 
00098     double mag = (data - breaks[glb]) / (breaks[glb+1] - breaks[glb]);
00099     rval = (colors[glb+1] * mag) + (colors[glb] * (1.0-mag));
00100 
00101     return rval;
00102 }
00103 
00104 /*
00105   old color map :  purple,blue,cyan,green,yellow,red
00106     if (data >= 1.0){
00107       //data is above max
00108       r = 1.0;
00109       g = 1.0;
00110       b = 1.0;
00111     }else if (data >= breaks[5]){
00112       //red to white
00113       r = 1.0;
00114       g = (data-breaks[5])/(1.0-breaks[5]);
00115       b = (data-breaks[5])/(1.0-breaks[5]);
00116     }else if (data >= breaks[4]){
00117       //yellow to red
00118       r = 1.0;
00119       g = (breaks[5] - data)/(breaks[5] - breaks[4]);
00120     } else if (data >= breaks[3]){
00121       //green to yellow
00122       r = (data - breaks[3])/(breaks[4]-breaks[3]);
00123       g = 1.0;
00124     } else if (data >= breaks[2]){
00125       //cyan to green
00126       g = 1.0;
00127       b = (breaks[3]-data)/(breaks[3]-breaks[2]);
00128     } else if (data >= breaks[1]){
00129       //blue to cyan
00130       b= 1.0;
00131       g= (data - breaks[1])/(breaks[2]-breaks[1]);
00132     } else if (data >= breaks[0]) {
00133       //purple to blue
00134       b = 1.0;
00135       r = (breaks[1] - data)/(breaks[1]-breaks[0]);
00136     } else if (data > 0.0){
00137       //black to purple
00138       b = (1.0 * data)/(breaks[0]);
00139       r = (1.0 * data)/(breaks[0]);
00140     }
00141 */
00142 
00143 
00144 //#ifndef SWIG
00145 void default_opengl_color_map( ColorMap &opengl_color_map )
00146 {
00147     opengl_color_map[0]  = LIGHTYELLOW;
00148     opengl_color_map[1]  = DARKRED;
00149     opengl_color_map[2]  = PINK1;
00150     opengl_color_map[3]  = PINK2;
00151     opengl_color_map[4]  = CYAN;
00152     opengl_color_map[5]  = MAGENTA;
00153     opengl_color_map[6]  = BLACK;
00154     opengl_color_map[7]  = WHITE;
00155 
00156     opengl_color_map[8]  = DARKRED;
00157     opengl_color_map[9]  = DARKRED;
00158     opengl_color_map[10] = DARKRED;
00159     opengl_color_map[11] = DARKRED;
00160     opengl_color_map[12] = DARKRED;
00161     opengl_color_map[13] = DARKRED;
00162     opengl_color_map[14] = DARKRED;
00163     opengl_color_map[15] = DARKRED;
00164 }
00165 
00166 void default_eps_rgb_map( ColorMap &eps_rgb_map)
00167 {
00168     eps_rgb_map[0]  = LIGHTYELLOW;
00169     eps_rgb_map[1]  = DARKRED;
00170     eps_rgb_map[2]  = PINK1;
00171     eps_rgb_map[3]  = PINK2;
00172     eps_rgb_map[4]  = CYAN;
00173     eps_rgb_map[5]  = MAGENTA;
00174     eps_rgb_map[6]  = BLACK;
00175     eps_rgb_map[7]  = WHITE;
00176 
00177     eps_rgb_map[8]  = DARKRED;
00178     eps_rgb_map[9]  = DARKRED;
00179     eps_rgb_map[10] = DARKRED;
00180     eps_rgb_map[11] = DARKRED;
00181     eps_rgb_map[12] = DARKRED;
00182     eps_rgb_map[13] = DARKRED;
00183     eps_rgb_map[14] = DARKRED;
00184     eps_rgb_map[15] = DARKRED;
00185 }
00186 
00187 void default_eps_grayscale_map( GrayscaleMap &eps_grayscale_map)
00188 {
00189     eps_grayscale_map[0]  = 0.8;
00190     eps_grayscale_map[1]  = 0.6;
00191     eps_grayscale_map[2]  = 0.4;
00192     eps_grayscale_map[3]  = 0.2;
00193     eps_grayscale_map[4]  = 0.0;
00194     eps_grayscale_map[5]  = 0.1;
00195     eps_grayscale_map[6]  = 1.0;
00196     eps_grayscale_map[7]  = 1.0;
00197 
00198     eps_grayscale_map[8]  = 1.0;
00199     eps_grayscale_map[9]  = 1.0;
00200     eps_grayscale_map[10] = 1.0;
00201     eps_grayscale_map[11] = 1.0;
00202     eps_grayscale_map[12] = 1.0;
00203     eps_grayscale_map[13] = 1.0;
00204     eps_grayscale_map[14] = 1.0;
00205     eps_grayscale_map[15] = 1.0;
00206 }
00207 
00208 #if 0
00209 int load_map( ColorMap &map)
00210 {
00211     /* fix me */
00212     return 0;
00213 }
00214 
00215 int load_map( GrayscaleMap &map)
00216 {
00217     /* fix me */
00218     return 0;
00219 }
00220 #endif
00221 //#endif /* SWIG */
00222 

Generated on Mon May 24 09:53:30 2010 for TUMBLE by  doxygen 1.5.2