00001
00006 #ifdef HAVE_CONFIG_H
00007 #include <tumble-conf.h>
00008 #endif
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
00038
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
00081
00082
00083
00084
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;
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
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
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
00212 return 0;
00213 }
00214
00215 int load_map( GrayscaleMap &map)
00216 {
00217
00218 return 0;
00219 }
00220 #endif
00221
00222