inlib
1.2.0
|
00001 // Copyright (C) 2010, Guy Barrand. All rights reserved. 00002 // See the file inlib.license for terms. 00003 00004 #ifndef inlib_colord 00005 #define inlib_colord 00006 00007 #include "vec3d" 00008 00009 namespace inlib { 00010 00011 class colord : public vec3d { 00012 public: 00013 inline colord(){} 00014 inline colord(double a_r,double a_g,double a_b):vec3d(a_r,a_g,a_b){} 00015 virtual ~colord() {} 00016 public: 00017 inline colord(const colord& a_from):vec3d(a_from){} 00018 inline colord& operator=(const colord& a_from){ 00019 vec3d::operator=(a_from); 00020 return *this; 00021 } 00022 public: 00023 inline double r() const {return m_vector[0];} 00024 inline double g() const {return m_vector[1];} 00025 inline double b() const {return m_vector[2];} 00026 00027 public: 00028 // our forever 65 named colors taken long time ago from X11. 00029 00030 //NOTE : don't handle a static object because of mem balance. 00031 //0-9 00032 inline static colord aquamarine() {return colord(0.496101,0.996109,0.828138);} 00033 inline static colord mediumaquamarine() {return colord(0.398444,0.800793,0.664073);} 00034 inline static colord black() {return colord(0,0,0);} 00035 inline static colord blue() {return colord(0,0,1);} 00036 inline static colord cadetblue() {return colord(0.371099,0.617197,0.62501);} 00037 inline static colord cornflowerblue() {return colord(0.390631,0.58204,0.925795);} 00038 inline static colord darkslateblue() {return colord(0.281254,0.238285,0.542977);} 00039 inline static colord lightblue() {return colord(0.675792,0.843763,0.898451);} 00040 inline static colord lightsteelblue() {return colord(0.68751,0.765637,0.867201);} 00041 inline static colord mediumblue() {return colord(0,0,0.800793);} 00042 00043 //10-19 00044 inline static colord mediumslateblue() {return colord(0.480476,0.406256,0.929702);} 00045 inline static colord midnightblue() {return colord(0.0976577,0.0976577,0.437507);} 00046 inline static colord navyblue() {return colord(0,0,0.500008);} 00047 inline static colord navy() {return colord(0,0,0.500008);} 00048 inline static colord skyblue() {return colord(0.527352,0.8047,0.917983);} 00049 inline static colord slateblue() {return colord(0.414069,0.351568,0.800793);} 00050 inline static colord steelblue() {return colord(0.273442,0.50782,0.703136);} 00051 inline static colord coral() {return colord(0.996109,0.496101,0.312505);} 00052 inline static colord cyan() {return colord(0,1,1);} 00053 inline static colord firebrick() {return colord(0.695323,0.132815,0.132815);} 00054 00055 //20-29 00056 inline static colord brown() {return colord(0.644541,0.164065,0.164065);} 00057 inline static colord gold() {return colord(0.996109,0.839857,0);} 00058 inline static colord goldenrod() {return colord(0.851575,0.644541,0.125002);} 00059 inline static colord green() {return colord(0,1,0);} 00060 inline static colord darkgreen() {return colord(0,0.390631,0);} 00061 inline static colord darkolivegreen() {return colord(0.332036,0.417975,0.183597);} 00062 inline static colord forestgreen() {return colord(0.132815,0.542977,0.132815);} 00063 inline static colord limegreen() {return colord(0.195315,0.800793,0.195315);} 00064 inline static colord mediumseagreen() {return colord(0.234379,0.699229,0.441413);} 00065 inline static colord mediumspringgreen() {return colord(0,0.976577,0.601572);} 00066 00067 //30-39 00068 inline static colord palegreen() {return colord(0.593759,0.980484,0.593759);} 00069 inline static colord seagreen() {return colord(0.17969,0.542977,0.339849);} 00070 inline static colord springgreen() {return colord(0,0.996109,0.496101);} 00071 inline static colord yellowgreen() {return colord(0.601572,0.800793,0.195315);} 00072 inline static colord darkslategrey() {return colord(0.183597,0.308598,0.308598);} 00073 inline static colord dimgrey() {return colord(0.410163,0.410163,0.410163);} 00074 inline static colord lightgrey() {return colord(0.824231,0.824231,0.824231);} 00075 inline static colord grey() {return colord(0.750011,0.750011,0.750011);} 00076 inline static colord khaki() {return colord(0.937514,0.898451,0.546883);} 00077 inline static colord magenta() {return colord(1,0,1);} 00078 00079 //40-49 00080 inline static colord maroon() {return colord(0.68751,0.187503,0.375006);} 00081 inline static colord orange() {return colord(0.996109,0.644541,0);} 00082 inline static colord orchid() {return colord(0.851575,0.437507,0.83595);} 00083 inline static colord darkorchid() {return colord(0.597665,0.195315,0.796887);} 00084 inline static colord mediumorchid() {return colord(0.726574,0.332036,0.824231);} 00085 inline static colord pink() {return colord(0.996109,0.750011,0.792981);} 00086 inline static colord plum() {return colord(0.863294,0.62501,0.863294);} 00087 inline static colord red() {return colord(1,0,0);} 00088 inline static colord indianred() {return colord(0.800793,0.35938,0.35938);} 00089 inline static colord mediumvioletred() {return colord(0.777356,0.0820325,0.519539);} 00090 00091 //50-59 00092 inline static colord orangered() {return colord(0.996109,0.269535,0);} 00093 inline static colord violetred() {return colord(0.812512,0.125002,0.562509);} 00094 inline static colord salmon() {return colord(0.976577,0.500008,0.445319);} 00095 inline static colord sienna() {return colord(0.62501,0.320317,0.175784);} 00096 inline static colord tan() {return colord(0.820325,0.703136,0.546883);} 00097 inline static colord thistle() {return colord(0.843763,0.746105,0.843763);} 00098 inline static colord turquoise() {return colord(0.250004,0.875013,0.812512);} 00099 inline static colord darkturquoise() {return colord(0,0.8047,0.816419);} 00100 inline static colord mediumturquoise() {return colord(0.281254,0.816419,0.796887);} 00101 inline static colord violet() {return colord(0.929702,0.50782,0.929702);} 00102 00103 //60-64 00104 inline static colord blueviolet() {return colord(0.539071,0.167971,0.882826);} 00105 inline static colord wheat() {return colord(0.957046,0.867201,0.699229);} 00106 inline static colord white() {return colord(1,1,1);} 00107 inline static colord yellow() {return colord(1,1,0);} 00108 inline static colord greenyellow() {return colord(0.675792,0.996109,0.18359);} 00109 00110 public: //a list form of the uppers : 00111 inline static unsigned int named_color_number() {return 65;} 00112 typedef char name[24]; 00113 inline static const name* named_color_names() { 00114 static const char list[65][24] = { //read only static. 00115 "aquamarine", 00116 "mediumaquamarine", 00117 "black", 00118 "blue", 00119 "cadetblue", 00120 "cornflowerblue", 00121 "darkslateblue", 00122 "lightblue", 00123 "lightsteelblue", 00124 "mediumblue", 00125 00126 "mediumslateblue", 00127 "midnightblue", 00128 "navyblue", 00129 "navy", 00130 "skyblue", 00131 "slateblue", 00132 "steelblue", 00133 "coral", 00134 "cyan", 00135 "firebrick", 00136 00137 "brown", 00138 "gold", 00139 "goldenrod", 00140 "green", 00141 "darkgreen", 00142 "darkolivegreen", 00143 "forestgreen", 00144 "limegreen", 00145 "mediumseagreen", 00146 "mediumspringgreen", 00147 00148 "palegreen", 00149 "seagreen", 00150 "springgreen", 00151 "yellowgreen", 00152 "darkslategrey", 00153 "dimgrey", 00154 "lightgrey", 00155 "grey", 00156 "khaki", 00157 "magenta", 00158 00159 "maroon", 00160 "orange", 00161 "orchid", 00162 "darkorchid", 00163 "mediumorchid", 00164 "pink", 00165 "plum", 00166 "red", 00167 "indianred", 00168 "mediumvioletred", 00169 00170 "orangered", 00171 "violetred", 00172 "salmon", 00173 "sienna", 00174 "tan", 00175 "thistle", 00176 "turquoise", 00177 "darkturquoise", 00178 "mediumturquoise", 00179 "violet", 00180 00181 "blueviolet", 00182 "wheat", 00183 "white", 00184 "yellow", 00185 "greenyellow" 00186 }; 00187 return list; 00188 } 00189 00190 typedef double rgb[3]; 00191 inline static const rgb* named_color_rgbs() { 00192 static const double list[65][3] = { 00193 {0.496101,0.996109,0.828138}, //aquamarine 00194 {0.398444,0.800793,0.664073}, //mediumaquamarine 00195 {0,0,0}, //black 00196 {0,0,1}, //blue 00197 {0.371099,0.617197,0.62501}, //cadetblue 00198 {0.390631,0.58204,0.925795}, //cornflowerblue 00199 {0.281254,0.238285,0.542977}, //darkslateblue 00200 {0.675792,0.843763,0.898451}, //lightblue 00201 {0.68751,0.765637,0.867201}, //lightsteelblue 00202 {0,0,0.800793}, //mediumblue 00203 00204 {0.480476,0.406256,0.929702}, //mediumslateblue 00205 {0.0976577,0.0976577,0.437507}, //midnightblue 00206 {0,0,0.500008}, //navyblue 00207 {0,0,0.500008}, //navy 00208 {0.527352,0.8047,0.917983}, //skyblue 00209 {0.414069,0.351568,0.800793}, //slateblue 00210 {0.273442,0.50782,0.703136}, //steelblue 00211 {0.996109,0.496101,0.312505}, //coral 00212 {0,1,1}, //cyan 00213 {0.695323,0.132815,0.13281}, //firebrick 00214 00215 {0.644541,0.164065,0.164065}, //brown 00216 {0.996109,0.839857,0}, //gold 00217 {0.851575,0.644541,0.125002}, //goldenrod 00218 {0,1,0}, //green 00219 {0,0.390631,0}, //darkgreen 00220 {0.332036,0.417975,0.183597}, //darkolivegreen 00221 {0.132815,0.542977,0.132815}, //forestgreen 00222 {0.195315,0.800793,0.195315}, //limegreen 00223 {0.234379,0.699229,0.441413}, //mediumseagreen 00224 {0,0.976577,0.601572}, //mediumspringgreen 00225 00226 {0.593759,0.980484,0.593759}, //palegreen 00227 {0.17969,0.542977,0.339849}, //seagreen 00228 {0,0.996109,0.496101}, //springgreen 00229 {0.601572,0.800793,0.195315}, //yellowgreen 00230 {0.183597,0.308598,0.308598}, //darkslategrey 00231 {0.410163,0.410163,0.410163}, //dimgrey 00232 {0.824231,0.824231,0.824231}, //lightgrey 00233 {0.750011,0.750011,0.750011}, //grey 00234 {0.937514,0.898451,0.546883}, //khaki 00235 {1,0,1}, //magenta 00236 00237 {0.68751,0.187503,0.375006}, //maroon 00238 {0.996109,0.644541,0}, //orange 00239 {0.851575,0.437507,0.83595}, //orchid 00240 {0.597665,0.195315,0.796887}, //darkorchid 00241 {0.726574,0.332036,0.824231}, //mediumorchid 00242 {0.996109,0.750011,0.792981}, //pink 00243 {0.863294,0.62501,0.863294}, //plum 00244 {1,0,0}, //red 00245 {0.800793,0.35938,0.35938}, //indianred 00246 {0.777356,0.0820325,0.519539}, //mediumvioletred 00247 00248 {0.996109,0.269535,0}, //orangered 00249 {0.812512,0.125002,0.562509}, //violetred 00250 {0.976577,0.500008,0.445319}, //salmon 00251 {0.62501,0.320317,0.175784}, //sienna 00252 {0.820325,0.703136,0.546883}, //tan 00253 {0.843763,0.746105,0.843763}, //thistle 00254 {0.250004,0.875013,0.812512}, //turquoise 00255 {0,0.8047,0.816419}, //darkturquoise 00256 {0.281254,0.816419,0.796887}, //mediumturquoise 00257 {0.929702,0.50782,0.929702}, //violet 00258 00259 {0.539071,0.167971,0.882826}, //blueviolet 00260 {0.957046,0.867201,0.699229}, //wheat 00261 {1,1,1}, //white 00262 {1,1,0}, //yellow 00263 {0.675792,0.996109,0.18359} //greenyellow 00264 }; 00265 return list; 00266 } 00267 00268 inline static bool to(const std::string& a_string, 00269 double& a_r,double& a_g,double& a_b){ 00270 unsigned int number = named_color_number(); 00271 const colord::name* names = named_color_names(); 00272 const colord::rgb* rgbs = named_color_rgbs(); 00273 for(unsigned int index=0;index<number;index++) { 00274 if(a_string==names[index]) { 00275 a_r = rgbs[index][0]; 00276 a_g = rgbs[index][1]; 00277 a_b = rgbs[index][2]; 00278 return true; 00279 } 00280 } 00281 a_r = 0.5; 00282 a_g = 0.5; 00283 a_b = 0.5; 00284 return false; 00285 } 00286 00287 }; 00288 00289 } 00290 00291 #endif