| 1 | greg | 2.2 | /* Copyright (c) 1992 Regents of the University of California */ | 
| 2 | greg | 1.1 |  | 
| 3 |  |  | #ifndef lint | 
| 4 |  |  | static char SCCSid[] = "$SunId$ LBL"; | 
| 5 |  |  | #endif | 
| 6 |  |  |  | 
| 7 |  |  | /* | 
| 8 |  |  | * Convert Neutral File Format input to Radiance scene description. | 
| 9 |  |  | * | 
| 10 |  |  | *      12/9/90         Greg Ward | 
| 11 | greg | 2.2 | *      02/7/92         Peter Averkamp added X11(MTV)color names & | 
| 12 |  |  | *                      fixed some lf's for direct import of MTV | 
| 13 |  |  | *                      source files | 
| 14 | greg | 1.1 | */ | 
| 15 |  |  |  | 
| 16 |  |  | /****************************************************************** | 
| 17 |  |  |  | 
| 18 |  |  | Since Eric Haines wrote such excellent documentation of his | 
| 19 |  |  | Neutral File Format, I am just going to reprint it here with | 
| 20 |  |  | my added comments in braces {}. | 
| 21 |  |  |  | 
| 22 |  |  | Neutral File Format (NFF), by Eric Haines | 
| 23 |  |  |  | 
| 24 |  |  | Draft document #1, 10/3/88 | 
| 25 |  |  |  | 
| 26 |  |  | The NFF (Neutral File Format) is designed as a minimal scene description | 
| 27 |  |  | language.  The language was designed in order to test various rendering | 
| 28 |  |  | algorithms and efficiency schemes.  It is meant to describe the geometry and | 
| 29 |  |  | basic surface characteristics of objects, the placement of lights, and the | 
| 30 |  |  | viewing frustum for the eye.  Some additional information is provided for | 
| 31 |  |  | esthetic reasons (such as the color of the objects, which is not strictly | 
| 32 |  |  | necessary for testing rendering algorithms). | 
| 33 |  |  |  | 
| 34 |  |  | Future enhancements include:  circle and torus objects, spline surfaces | 
| 35 |  |  | with trimming curves, directional lights, characteristics for positional | 
| 36 |  |  | lights, CSG descriptions, and probably more by the time you read this. | 
| 37 |  |  | Comments, suggestions, and criticisms are all welcome. | 
| 38 |  |  |  | 
| 39 |  |  | At present the NFF file format is used in conjunction with the SPD (Standard | 
| 40 |  |  | Procedural Database) software, a package designed to create a variety of | 
| 41 |  |  | databases for testing rendering schemes.  The SPD package is available | 
| 42 |  |  | from Netlib and via ftp from drizzle.cs.uoregon.edu.  For more information | 
| 43 |  |  | about SPD see "A Proposal for Standard Graphics Environments," IEEE Computer | 
| 44 |  |  | Graphics and Applications, vol. 7, no. 11, November 1987, pp. 3-5. | 
| 45 |  |  |  | 
| 46 |  |  | By providing a minimal interface, NFF is meant to act as a simple format to | 
| 47 |  |  | allow the programmer to quickly write filters to move from NFF to the | 
| 48 |  |  | local file format.  Presently the following entities are supported: | 
| 49 |  |  | A simple perspective frustum | 
| 50 |  |  | A positional (vs. directional) light source description | 
| 51 |  |  | A background color description | 
| 52 |  |  | A surface properties description | 
| 53 |  |  | Polygon, polygonal patch, cylinder/cone, and sphere descriptions | 
| 54 |  |  |  | 
| 55 |  |  | Files are output as lines of text.  For each entity, the first line | 
| 56 |  |  | defines its type.  The rest of the first line and possibly other lines | 
| 57 |  |  | contain further information about the entity.  Entities include: | 
| 58 |  |  |  | 
| 59 |  |  | "v"  - viewing vectors and angles       { optionally creates view file } | 
| 60 |  |  | "l"  - positional light location        { it's there, but bad to use } | 
| 61 |  |  | "b"  - background color                 { ditto } | 
| 62 |  |  | "f"  - object material properties       { this is flakey } | 
| 63 |  |  | "c"  - cone or cylinder primitive | 
| 64 |  |  | "s"  - sphere primitive | 
| 65 |  |  | "p"  - polygon primitive | 
| 66 |  |  | "pp" - polygonal patch primitive        { interpreted same as p for now } | 
| 67 |  |  |  | 
| 68 |  |  | These are explained in depth below:     { see conversion routines } | 
| 69 |  |  |  | 
| 70 |  |  | ***********************************************************************/ | 
| 71 |  |  |  | 
| 72 |  |  | #include <stdio.h> | 
| 73 |  |  |  | 
| 74 |  |  | char    *viewfile = NULL;       /* view parameters file */ | 
| 75 |  |  |  | 
| 76 |  |  | char    *progname; | 
| 77 |  |  |  | 
| 78 |  |  |  | 
| 79 |  |  | main(argc, argv)                /* convert NFF file to Radiance */ | 
| 80 |  |  | int     argc; | 
| 81 |  |  | char    *argv[]; | 
| 82 |  |  | { | 
| 83 |  |  | int     i; | 
| 84 |  |  |  | 
| 85 |  |  | progname = argv[0]; | 
| 86 |  |  | for (i = 1; i < argc; i++) | 
| 87 |  |  | if (argc-i > 1 && !strcmp(argv[i], "-vf")) | 
| 88 |  |  | viewfile = argv[++i]; | 
| 89 | greg | 2.2 | else if (!strncmp(argv[i], "-h",2)) | 
| 90 |  |  | goto userr; | 
| 91 | greg | 1.1 | else | 
| 92 |  |  | break; | 
| 93 | greg | 2.2 | if (argc-i > 1) | 
| 94 | greg | 1.1 | goto userr; | 
| 95 | greg | 2.2 | if (argc-i == 1 && freopen(argv[i], "r", stdin) == NULL) { | 
| 96 | greg | 1.1 | perror(argv[i]); | 
| 97 |  |  | exit(1); | 
| 98 |  |  | } | 
| 99 |  |  | init(); | 
| 100 |  |  | nff2rad(); | 
| 101 |  |  | exit(0); | 
| 102 |  |  | userr: | 
| 103 |  |  | fprintf(stderr, "Usage: %s [-vf viewfile] [input]\n", progname); | 
| 104 |  |  | exit(1); | 
| 105 |  |  | } | 
| 106 |  |  |  | 
| 107 |  |  |  | 
| 108 |  |  | init()                  /* spit out initial definitions */ | 
| 109 |  |  | { | 
| 110 |  |  | printf("# File created by %s\n", progname); | 
| 111 |  |  | printf("\nvoid light light\n"); | 
| 112 | greg | 2.4 | printf("0\n0\n3 1e6 1e6 1e6\n"); | 
| 113 | greg | 1.1 | printf("\nvoid plastic fill\n"); | 
| 114 |  |  | printf("0\n0\n5 .5 .5 .5 0 0\n"); | 
| 115 |  |  | } | 
| 116 |  |  |  | 
| 117 |  |  |  | 
| 118 |  |  | nff2rad()               /* convert NFF on stdin to Radiance on stdout */ | 
| 119 |  |  | { | 
| 120 |  |  | register int    c; | 
| 121 |  |  |  | 
| 122 |  |  | while ((c = getchar()) != EOF) | 
| 123 |  |  | switch (c) { | 
| 124 |  |  | case ' ':                       /* white space */ | 
| 125 |  |  | case '\t': | 
| 126 |  |  | case '\n': | 
| 127 |  |  | case '\f': | 
| 128 |  |  | case '\r': | 
| 129 |  |  | continue; | 
| 130 |  |  | case '#':                       /* comment */ | 
| 131 |  |  | comment(); | 
| 132 |  |  | break; | 
| 133 |  |  | case 'v':                       /* view point */ | 
| 134 |  |  | view(); | 
| 135 |  |  | break; | 
| 136 |  |  | case 'l':                       /* light source */ | 
| 137 |  |  | light(); | 
| 138 |  |  | break; | 
| 139 |  |  | case 'b':                       /* background color */ | 
| 140 |  |  | background(); | 
| 141 |  |  | break; | 
| 142 |  |  | case 'f':                       /* fill material */ | 
| 143 |  |  | fill(); | 
| 144 |  |  | break; | 
| 145 |  |  | case 'c':                       /* cylinder or cone */ | 
| 146 |  |  | cone(); | 
| 147 |  |  | break; | 
| 148 |  |  | case 's':                       /* sphere */ | 
| 149 |  |  | sphere(); | 
| 150 |  |  | break; | 
| 151 |  |  | case 'p':                       /* polygon or patch */ | 
| 152 |  |  | poly(); | 
| 153 |  |  | break; | 
| 154 |  |  | default:                        /* unknown */ | 
| 155 |  |  | fprintf(stderr, "%c: unknown NFF primitive\n", c); | 
| 156 |  |  | exit(1); | 
| 157 |  |  | } | 
| 158 |  |  | } | 
| 159 |  |  |  | 
| 160 |  |  |  | 
| 161 |  |  | /******************************************* | 
| 162 |  |  |  | 
| 163 |  |  | Comment.  Description: | 
| 164 |  |  | "#" [ string ] | 
| 165 |  |  |  | 
| 166 |  |  | Format: | 
| 167 |  |  | # [ string ] | 
| 168 |  |  |  | 
| 169 |  |  | As soon as a "#" character is detected, the rest of the line is considered | 
| 170 |  |  | a comment. | 
| 171 |  |  |  | 
| 172 |  |  | ******************/ | 
| 173 |  |  |  | 
| 174 |  |  | comment() | 
| 175 |  |  | { | 
| 176 |  |  | register int    c; | 
| 177 |  |  |  | 
| 178 |  |  | putchar('#'); | 
| 179 |  |  | while ((c = getchar()) != EOF) { | 
| 180 |  |  | putchar(c); | 
| 181 |  |  | if (c == '\n') | 
| 182 |  |  | break; | 
| 183 |  |  | } | 
| 184 |  |  | } | 
| 185 |  |  |  | 
| 186 |  |  |  | 
| 187 |  |  | /*************************************************** | 
| 188 |  |  |  | 
| 189 |  |  | Viewpoint location.  Description: | 
| 190 |  |  | "v" | 
| 191 |  |  | "from" Fx Fy Fz | 
| 192 |  |  | "at" Ax Ay Az | 
| 193 |  |  | "up" Ux Uy Uz | 
| 194 |  |  | "angle" angle | 
| 195 |  |  | "hither" hither | 
| 196 |  |  | "resolution" xres yres | 
| 197 |  |  |  | 
| 198 |  |  | Format: | 
| 199 |  |  |  | 
| 200 |  |  | v | 
| 201 |  |  | from %g %g %g | 
| 202 |  |  | at %g %g %g | 
| 203 |  |  | up %g %g %g | 
| 204 |  |  | angle %g | 
| 205 |  |  | hither %g | 
| 206 |  |  | resolution %d %d | 
| 207 |  |  |  | 
| 208 |  |  | The parameters are: | 
| 209 |  |  |  | 
| 210 |  |  | From:  the eye location in XYZ. | 
| 211 |  |  | At:    a position to be at the center of the image, in XYZ world | 
| 212 |  |  | coordinates.  A.k.a. "lookat". | 
| 213 |  |  | Up:    a vector defining which direction is up, as an XYZ vector. | 
| 214 |  |  | Angle: in degrees, defined as from the center of top pixel row to | 
| 215 |  |  | bottom pixel row and left column to right column. | 
| 216 |  |  | Resolution: in pixels, in x and in y. | 
| 217 |  |  |  | 
| 218 |  |  | Note that no assumptions are made about normalizing the data (e.g. the | 
| 219 |  |  | from-at distance does not have to be 1).  Also, vectors are not | 
| 220 |  |  | required to be perpendicular to each other. | 
| 221 |  |  |  | 
| 222 |  |  | For all databases some viewing parameters are always the same: | 
| 223 |  |  | Yon is "at infinity." | 
| 224 |  |  | Aspect ratio is 1.0. | 
| 225 |  |  |  | 
| 226 |  |  | A view entity must be defined before any objects are defined (this | 
| 227 |  |  | requirement is so that NFF files can be used by hidden surface machines). | 
| 228 |  |  |  | 
| 229 |  |  | ***************/ | 
| 230 |  |  |  | 
| 231 |  |  | view() | 
| 232 |  |  | { | 
| 233 |  |  | static FILE     *fp = NULL; | 
| 234 |  |  | float   from[3], at[3], up[3], angle; | 
| 235 |  |  |  | 
| 236 |  |  | if (scanf(" from %f %f %f", &from[0], &from[1], &from[2]) != 3) | 
| 237 |  |  | goto fmterr; | 
| 238 |  |  | if (scanf(" at %f %f %f", &at[0], &at[1], &at[2]) != 3) | 
| 239 |  |  | goto fmterr; | 
| 240 |  |  | if (scanf(" up %f %f %f", &up[0], &up[1], &up[2]) != 3) | 
| 241 |  |  | goto fmterr; | 
| 242 |  |  | if (scanf(" angle %f", &angle) != 1) | 
| 243 |  |  | goto fmterr; | 
| 244 |  |  | scanf(" hither %*f"); | 
| 245 |  |  | scanf(" resolution %*d %*d"); | 
| 246 |  |  | if (viewfile != NULL) { | 
| 247 |  |  | if (fp == NULL && (fp = fopen(viewfile, "a")) == NULL) { | 
| 248 |  |  | perror(viewfile); | 
| 249 |  |  | exit(1); | 
| 250 |  |  | } | 
| 251 |  |  | fprintf(fp, | 
| 252 |  |  | "VIEW= -vp %g %g %g -vd %g %g %g -vu %g %g %g -vh %g -vv %g\n", | 
| 253 |  |  | from[0], from[1], from[2], | 
| 254 |  |  | at[0]-from[0], at[1]-from[1], at[2]-from[2], | 
| 255 |  |  | up[0], up[1], up[2], | 
| 256 |  |  | angle, angle); | 
| 257 |  |  | } | 
| 258 |  |  | return; | 
| 259 |  |  | fmterr: | 
| 260 |  |  | fprintf(stderr, "%s: view syntax error\n", progname); | 
| 261 |  |  | exit(1); | 
| 262 |  |  | } | 
| 263 |  |  |  | 
| 264 |  |  |  | 
| 265 |  |  | /******************************** | 
| 266 |  |  |  | 
| 267 |  |  | Positional light.  A light is defined by XYZ position.  Description: | 
| 268 |  |  | "l" X Y Z | 
| 269 |  |  |  | 
| 270 |  |  | Format: | 
| 271 |  |  | l %g %g %g | 
| 272 |  |  |  | 
| 273 |  |  | All light entities must be defined before any objects are defined (this | 
| 274 |  |  | requirement is so that NFF files can be used by hidden surface machines). | 
| 275 |  |  | Lights have a non-zero intensity of no particular value [this definition | 
| 276 |  |  | may change soon, with the addition of an intensity and/or color]. | 
| 277 |  |  |  | 
| 278 |  |  | **************************/ | 
| 279 |  |  |  | 
| 280 |  |  | light() | 
| 281 |  |  | { | 
| 282 |  |  | static int      nlights = 0; | 
| 283 |  |  | register int    c; | 
| 284 |  |  | float   x, y, z; | 
| 285 | greg | 2.2 |  | 
| 286 |  |  | if (scanf("%f %f %f",&x, &y, &z) != 3) { | 
| 287 |  |  | fprintf(stderr, "%s: light source syntax error\n", progname); | 
| 288 |  |  | exit(1); | 
| 289 | greg | 1.1 | } | 
| 290 |  |  | while ((c = getchar()) != EOF && c != '\n') | 
| 291 |  |  | ; | 
| 292 | greg | 2.2 | printf("\nlight sphere l%d \n", ++nlights); | 
| 293 | greg | 2.4 | printf("0\n0\n4 %g %g %g .01\n", x, y, z); | 
| 294 | greg | 1.1 | } | 
| 295 |  |  |  | 
| 296 |  |  |  | 
| 297 |  |  | /************************************************** | 
| 298 |  |  |  | 
| 299 |  |  | Background color.  A color is simply RGB with values between 0 and 1: | 
| 300 |  |  | "b" R G B | 
| 301 |  |  |  | 
| 302 |  |  | Format: | 
| 303 |  |  | b %g %g %g | 
| 304 |  |  |  | 
| 305 |  |  | If no background color is set, assume RGB = {0,0,0}. | 
| 306 |  |  |  | 
| 307 |  |  | ********************/ | 
| 308 |  |  |  | 
| 309 |  |  | background() | 
| 310 |  |  | { | 
| 311 |  |  | float   r, g, b; | 
| 312 | greg | 2.2 | char colname[50]; | 
| 313 |  |  | double cvec[3]; | 
| 314 |  |  |  | 
| 315 |  |  | if (scanf("%s", colname) != 1) { | 
| 316 |  |  | fprintf(stderr,"%s: background syntax error\n",progname);exit(1); | 
| 317 |  |  | } | 
| 318 |  |  | if(LookupColorByName(colname,cvec)==1){ | 
| 319 |  |  | r=cvec[0];g=cvec[1];b=cvec[2]; | 
| 320 |  |  | }else{ | 
| 321 |  |  | if(sscanf(colname,"%f",&r)!=1 || | 
| 322 |  |  | scanf("%f %f", &g, &b) !=2) { | 
| 323 | greg | 1.1 | fprintf(stderr, "%s: background syntax error\n", progname); | 
| 324 |  |  | exit(1); | 
| 325 | greg | 2.2 | } | 
| 326 | greg | 1.1 | } | 
| 327 |  |  | printf("\nvoid glow backg_color\n"); | 
| 328 |  |  | printf("0\n0\n4 %g %g %g 0\n", r, g, b); | 
| 329 |  |  | printf("\nbackg_color source background\n"); | 
| 330 |  |  | printf("0\n0\n4 0 0 1 360\n"); | 
| 331 |  |  | } | 
| 332 |  |  |  | 
| 333 |  |  |  | 
| 334 |  |  | /**************************************************** | 
| 335 |  |  |  | 
| 336 |  |  | Fill color and shading parameters.  Description: | 
| 337 |  |  | "f" red green blue Kd Ks Shine T index_of_refraction | 
| 338 |  |  |  | 
| 339 |  |  | Format: | 
| 340 |  |  | f %g %g %g %g %g %g %g %g | 
| 341 |  |  |  | 
| 342 |  |  | RGB is in terms of 0.0 to 1.0. | 
| 343 |  |  |  | 
| 344 |  |  | Kd is the diffuse component, Ks the specular, Shine is the Phong cosine | 
| 345 |  |  | power for highlights, T is transmittance (fraction of light passed per | 
| 346 |  |  | unit).  Usually, 0 <= Kd <= 1 and 0 <= Ks <= 1, though it is not required | 
| 347 |  |  | that Kd + Ks == 1.  Note that transmitting objects ( T > 0 ) are considered | 
| 348 |  |  | to have two sides for algorithms that need these (normally objects have | 
| 349 |  |  | one side). | 
| 350 |  |  |  | 
| 351 |  |  | The fill color is used to color the objects following it until a new color | 
| 352 |  |  | is assigned. | 
| 353 |  |  |  | 
| 354 |  |  | *********************/ | 
| 355 |  |  |  | 
| 356 |  |  | fill() | 
| 357 |  |  | { | 
| 358 |  |  | float   r, g, b, d, s, p, t, n; | 
| 359 | greg | 2.2 | char colname[50]; | 
| 360 |  |  | double cvec[3]; | 
| 361 |  |  |  | 
| 362 |  |  | if (scanf("%s", colname) != 1) { | 
| 363 |  |  | fprintf(stderr,"%s: fill syntax error\n",progname);exit(1); | 
| 364 |  |  | } | 
| 365 |  |  | if(LookupColorByName(colname,cvec)==1){ | 
| 366 |  |  | r=cvec[0];g=cvec[1];b=cvec[2]; | 
| 367 |  |  | }else{ | 
| 368 |  |  | if(sscanf(colname,"%f",&r)!=1 || | 
| 369 |  |  | scanf("%f %f", &g, &b) !=2) { | 
| 370 |  |  | fprintf(stderr, "%s: fill syntax error\n", progname); | 
| 371 |  |  | exit(1); | 
| 372 |  |  | } | 
| 373 |  |  | } | 
| 374 |  |  | if (scanf("%f %f %f %f %f", &d, &s, &p, &t, &n) != 5) { | 
| 375 | greg | 1.1 | fprintf(stderr, "%s: fill material syntax error\n", progname); | 
| 376 |  |  | exit(1); | 
| 377 |  |  | } | 
| 378 |  |  | if (p > 1.) | 
| 379 |  |  | p = 1./p; | 
| 380 |  |  | if (t > .001) {         /* has transmission */ | 
| 381 | greg | 2.4 | if (n > 1.1) {          /* has index of refraction */ | 
| 382 |  |  | printf("\nvoid dielectric fill\n"); | 
| 383 |  |  | printf("0\n0\n5 %g %g %g %g 0\n", r, g, b, n); | 
| 384 |  |  | } else {                /* transmits w/o refraction */ | 
| 385 |  |  | printf("\nvoid trans fill\n"); | 
| 386 |  |  | printf("0\n0\n7 %g %g %g %g 0 %g 1\n", | 
| 387 |  |  | r*d, g*d, b*d, s, t); | 
| 388 |  |  | } | 
| 389 | greg | 1.1 | } else {                /* no transmission */ | 
| 390 |  |  | printf("\nvoid plastic fill\n"); | 
| 391 | greg | 2.4 | printf("0\n0\n5 %g %g %g %g %g\n", r*d, g*d, b*d, s, p); | 
| 392 | greg | 1.1 | } | 
| 393 |  |  | } | 
| 394 |  |  |  | 
| 395 |  |  |  | 
| 396 |  |  | /***************************************************** | 
| 397 |  |  |  | 
| 398 |  |  | Cylinder or cone.  A cylinder is defined as having a radius and an axis | 
| 399 |  |  | defined by two points, which also define the top and bottom edge of the | 
| 400 |  |  | cylinder.  A cone is defined similarly, the difference being that the apex | 
| 401 |  |  | and base radii are different.  The apex radius is defined as being smaller | 
| 402 |  |  | than the base radius.  Note that the surface exists without endcaps.  The | 
| 403 |  |  | cone or cylinder description: | 
| 404 |  |  |  | 
| 405 |  |  | "c" | 
| 406 |  |  | base.x base.y base.z base_radius | 
| 407 |  |  | apex.x apex.y apex.z apex_radius | 
| 408 |  |  |  | 
| 409 |  |  | Format: | 
| 410 |  |  | c | 
| 411 |  |  | %g %g %g %g | 
| 412 |  |  | %g %g %g %g | 
| 413 |  |  |  | 
| 414 |  |  | A negative value for both radii means that only the inside of the object is | 
| 415 |  |  | visible (objects are normally considered one sided, with the outside | 
| 416 |  |  | visible).  Note that the base and apex cannot be coincident for a cylinder | 
| 417 |  |  | or cone. | 
| 418 |  |  |  | 
| 419 |  |  | ************************/ | 
| 420 |  |  |  | 
| 421 |  |  | cone() | 
| 422 |  |  | { | 
| 423 |  |  | static int      ncs = 0; | 
| 424 |  |  | int     invert; | 
| 425 |  |  | float   x0, y0, z0, x1, y1, z1, r0, r1; | 
| 426 |  |  |  | 
| 427 |  |  | if (scanf("%f %f %f %f %f %f %f %f", &x0, &y0, &z0, &r0, | 
| 428 |  |  | &x1, &y1, &z1, &r1) != 8) { | 
| 429 |  |  | fprintf(stderr, "%s: cylinder or cone syntax error\n", | 
| 430 |  |  | progname); | 
| 431 |  |  | exit(1); | 
| 432 |  |  | } | 
| 433 |  |  | if (invert = r0 < 0.) { | 
| 434 |  |  | r0 = -r0; | 
| 435 |  |  | r1 = -r1; | 
| 436 |  |  | } | 
| 437 |  |  | if (r0-r1 < .001 && r1-r0 < .001) {     /* cylinder */ | 
| 438 | greg | 2.2 | printf("\nfill %s c%d \n", invert?"tube":"cylinder", ++ncs); | 
| 439 | greg | 1.1 | printf("0\n0\n7\n"); | 
| 440 |  |  | printf("\t%g\t%g\t%g\n", x0, y0, z0); | 
| 441 |  |  | printf("\t%g\t%g\t%g\n", x1, y1, z1); | 
| 442 |  |  | printf("\t%g\n", r0); | 
| 443 |  |  | } else {                                /* cone */ | 
| 444 | greg | 2.2 | printf("\nfill %s c%d \n", invert?"cup":"cone", ++ncs); | 
| 445 | greg | 1.1 | printf("0\n0\n8\n"); | 
| 446 |  |  | printf("\t%g\t%g\t%g\n", x0, y0, z0); | 
| 447 |  |  | printf("\t%g\t%g\t%g\n", x1, y1, z1); | 
| 448 |  |  | printf("\t%g\t%g\n", r0, r1); | 
| 449 |  |  | } | 
| 450 |  |  | } | 
| 451 |  |  |  | 
| 452 |  |  |  | 
| 453 |  |  | /***************************************** | 
| 454 |  |  |  | 
| 455 |  |  | Sphere.  A sphere is defined by a radius and center position: | 
| 456 |  |  | "s" center.x center.y center.z radius | 
| 457 |  |  |  | 
| 458 |  |  | Format: | 
| 459 |  |  | s %g %g %g %g | 
| 460 |  |  |  | 
| 461 |  |  | If the radius is negative, then only the sphere's inside is visible | 
| 462 |  |  | (objects are normally considered one sided, with the outside visible). | 
| 463 |  |  |  | 
| 464 |  |  | ******************/ | 
| 465 |  |  |  | 
| 466 |  |  | sphere() | 
| 467 |  |  | { | 
| 468 |  |  | static int      nspheres = 0; | 
| 469 |  |  | float   x, y, z, r; | 
| 470 |  |  |  | 
| 471 |  |  | if (scanf("%f %f %f %f", &x, &y, &z, &r) != 4) { | 
| 472 |  |  | fprintf(stderr, "%s: sphere syntax error\n", progname); | 
| 473 |  |  | exit(1); | 
| 474 |  |  | } | 
| 475 |  |  | if (r < 0.) { | 
| 476 | greg | 2.2 | printf("\nfill bubble s%d \n", ++nspheres); | 
| 477 | greg | 1.1 | printf("0\n0\n4 %g %g %g %g\n", x, y, z, -r); | 
| 478 |  |  | } else { | 
| 479 | greg | 2.2 | printf("\nfill sphere s%d \n", ++nspheres); | 
| 480 | greg | 1.1 | printf("0\n0\n4 %g %g %g %g\n", x, y, z, r); | 
| 481 |  |  | } | 
| 482 |  |  | } | 
| 483 |  |  |  | 
| 484 |  |  |  | 
| 485 |  |  | /********************************************* | 
| 486 |  |  |  | 
| 487 |  |  | Polygon.  A polygon is defined by a set of vertices.  With these databases, | 
| 488 |  |  | a polygon is defined to have all points coplanar.  A polygon has only | 
| 489 |  |  | one side, with the order of the vertices being counterclockwise as you | 
| 490 |  |  | face the polygon (right-handed coordinate system).  The first two edges | 
| 491 |  |  | must form a non-zero convex angle, so that the normal and side visibility | 
| 492 |  |  | can be determined.  Description: | 
| 493 |  |  |  | 
| 494 |  |  | "p" total_vertices | 
| 495 |  |  | vert1.x vert1.y vert1.z | 
| 496 |  |  | [etc. for total_vertices vertices] | 
| 497 |  |  |  | 
| 498 |  |  | Format: | 
| 499 |  |  | p %d | 
| 500 |  |  | [ %g %g %g ] <-- for total_vertices vertices | 
| 501 |  |  |  | 
| 502 |  |  | -------- | 
| 503 |  |  |  | 
| 504 |  |  | Polygonal patch.  A patch is defined by a set of vertices and their normals. | 
| 505 |  |  | With these databases, a patch is defined to have all points coplanar. | 
| 506 |  |  | A patch has only one side, with the order of the vertices being | 
| 507 |  |  | counterclockwise as you face the patch (right-handed coordinate system). | 
| 508 |  |  | The first two edges must form a non-zero convex angle, so that the normal | 
| 509 |  |  | and side visibility can be determined.  Description: | 
| 510 |  |  |  | 
| 511 |  |  | "pp" total_vertices | 
| 512 |  |  | vert1.x vert1.y vert1.z norm1.x norm1.y norm1.z | 
| 513 |  |  | [etc. for total_vertices vertices] | 
| 514 |  |  |  | 
| 515 |  |  | Format: | 
| 516 |  |  | pp %d | 
| 517 |  |  | [ %g %g %g %g %g %g ] <-- for total_vertices vertices | 
| 518 |  |  |  | 
| 519 |  |  | *******************/ | 
| 520 |  |  |  | 
| 521 |  |  | poly() | 
| 522 |  |  | { | 
| 523 |  |  | static int      npolys = 0; | 
| 524 |  |  | int     ispatch; | 
| 525 |  |  | int     nverts; | 
| 526 |  |  | float   x, y, z; | 
| 527 |  |  |  | 
| 528 |  |  | ispatch = getchar(); | 
| 529 |  |  | if (ispatch != 'p') { | 
| 530 |  |  | ungetc(ispatch, stdin); | 
| 531 |  |  | ispatch = 0; | 
| 532 |  |  | } | 
| 533 |  |  | if (scanf("%d", &nverts) != 1) | 
| 534 |  |  | goto fmterr; | 
| 535 | greg | 2.2 | printf("\nfill polygon p%d \n", ++npolys); | 
| 536 | greg | 1.1 | printf("0\n0\n%d\n", 3*nverts); | 
| 537 |  |  | while (nverts-- > 0) { | 
| 538 |  |  | if (scanf("%f %f %f", &x, &y, &z) != 3) | 
| 539 |  |  | goto fmterr; | 
| 540 |  |  | if (ispatch) | 
| 541 |  |  | scanf("%*f %*f %*f"); | 
| 542 |  |  | printf("\t%g\t%g\t%g\n", x, y, z); | 
| 543 |  |  | } | 
| 544 |  |  | return; | 
| 545 |  |  | fmterr: | 
| 546 |  |  | fprintf(stderr, "%s: polygon or patch syntax error\n", progname); | 
| 547 |  |  | exit(1); | 
| 548 | greg | 2.2 | } | 
| 549 |  |  | /*********************************************************************** | 
| 550 |  |  | * $Author: markv $ (Mark VandeWettering, drizzle.cs.uoregon.edu) | 
| 551 |  |  | * $Revision: 1.2 $ | 
| 552 |  |  | * $Date: 88/09/12 12:53:47 $ | 
| 553 |  |  | * $Log:        color.c,v $ | 
| 554 |  |  | * Revision 1.2  88/09/12  12:53:47  markv | 
| 555 |  |  | * Fixed problem in LookupColorbyName, had return ; and return(0). | 
| 556 |  |  | * [ Thank you lint! ] | 
| 557 |  |  | * | 
| 558 |  |  | * Revision 1.1  88/09/11  11:00:37  markv | 
| 559 |  |  | * Initial revision | 
| 560 |  |  | * | 
| 561 |  |  | * Peter Averkamp 92/02/01 | 
| 562 |  |  | * added complete X11R5 rgb.txt-table, hacked standalone version | 
| 563 |  |  | * for nff2rad | 
| 564 |  |  | * | 
| 565 |  |  | ***********************************************************************/ | 
| 566 |  |  |  | 
| 567 |  |  | typedef double Flt ; | 
| 568 |  |  | typedef Flt Vec[3] ; | 
| 569 |  |  | typedef Vec Point ; | 
| 570 |  |  | typedef Vec Color ; | 
| 571 |  |  |  | 
| 572 |  |  | #define VecCopy(a,b)     (b)[0]=(a)[0];(b)[1]=(a)[1];(b)[2]=(a)[2]; | 
| 573 |  |  | #define         NCOLORS         (738) | 
| 574 |  |  |  | 
| 575 |  |  | typedef struct t_color_entry { | 
| 576 |  |  | char *  ce_name ; | 
| 577 |  |  | Vec     ce_color ; | 
| 578 |  |  | } ColorEntry ; | 
| 579 |  |  |  | 
| 580 |  |  | #define LESS_THAN -1 | 
| 581 |  |  | #define GREATER_THAN 1 | 
| 582 |  |  | #define EQUAL_TO 0 | 
| 583 |  |  |  | 
| 584 |  |  | /* | 
| 585 |  |  | * Note: These colors must be in sorted order, because we binary search | 
| 586 |  |  | * for them. | 
| 587 |  |  | * | 
| 588 |  |  | * They were swiped from the X-11 distribution.  Sorry.... | 
| 589 |  |  | */ | 
| 590 |  |  |  | 
| 591 |  |  | ColorEntry Colors[] = { | 
| 592 | greg | 2.3 | {"AliceBlue",  {0.941176 , 0.972549 , 1.000000 }}, | 
| 593 |  |  | {"AntiqueWhite",  {0.980392 , 0.921569 , 0.843137 }}, | 
| 594 |  |  | {"AntiqueWhite1",  {1.000000 , 0.937255 , 0.858824 }}, | 
| 595 |  |  | {"AntiqueWhite2",  {0.933333 , 0.874510 , 0.800000 }}, | 
| 596 |  |  | {"AntiqueWhite3",  {0.803922 , 0.752941 , 0.690196 }}, | 
| 597 |  |  | {"AntiqueWhite4",  {0.545098 , 0.513725 , 0.470588 }}, | 
| 598 |  |  | {"BlanchedAlmond",  {1.000000 , 0.921569 , 0.803922 }}, | 
| 599 |  |  | {"BlueViolet",  {0.541176 , 0.168627 , 0.886275 }}, | 
| 600 |  |  | {"CadetBlue",  {0.372549 , 0.619608 , 0.627451 }}, | 
| 601 |  |  | {"CadetBlue1",  {0.596078 , 0.960784 , 1.000000 }}, | 
| 602 |  |  | {"CadetBlue2",  {0.556863 , 0.898039 , 0.933333 }}, | 
| 603 |  |  | {"CadetBlue3",  {0.478431 , 0.772549 , 0.803922 }}, | 
| 604 |  |  | {"CadetBlue4",  {0.325490 , 0.525490 , 0.545098 }}, | 
| 605 |  |  | {"CornflowerBlue",  {0.392157 , 0.584314 , 0.929412 }}, | 
| 606 |  |  | {"DarkGoldenrod",  {0.721569 , 0.525490 , 0.043137 }}, | 
| 607 |  |  | {"DarkGoldenrod1",  {1.000000 , 0.725490 , 0.058824 }}, | 
| 608 |  |  | {"DarkGoldenrod2",  {0.933333 , 0.678431 , 0.054902 }}, | 
| 609 |  |  | {"DarkGoldenrod3",  {0.803922 , 0.584314 , 0.047059 }}, | 
| 610 |  |  | {"DarkGoldenrod4",  {0.545098 , 0.396078 , 0.031373 }}, | 
| 611 |  |  | {"DarkGreen",  {0.000000 , 0.392157 , 0.000000 }}, | 
| 612 |  |  | {"DarkKhaki",  {0.741176 , 0.717647 , 0.419608 }}, | 
| 613 |  |  | {"DarkOliveGreen",  {0.333333 , 0.419608 , 0.184314 }}, | 
| 614 |  |  | {"DarkOliveGreen1",  {0.792157 , 1.000000 , 0.439216 }}, | 
| 615 |  |  | {"DarkOliveGreen2",  {0.737255 , 0.933333 , 0.407843 }}, | 
| 616 |  |  | {"DarkOliveGreen3",  {0.635294 , 0.803922 , 0.352941 }}, | 
| 617 |  |  | {"DarkOliveGreen4",  {0.431373 , 0.545098 , 0.239216 }}, | 
| 618 |  |  | {"DarkOrange",  {1.000000 , 0.549020 , 0.000000 }}, | 
| 619 |  |  | {"DarkOrange1",  {1.000000 , 0.498039 , 0.000000 }}, | 
| 620 |  |  | {"DarkOrange2",  {0.933333 , 0.462745 , 0.000000 }}, | 
| 621 |  |  | {"DarkOrange3",  {0.803922 , 0.400000 , 0.000000 }}, | 
| 622 |  |  | {"DarkOrange4",  {0.545098 , 0.270588 , 0.000000 }}, | 
| 623 |  |  | {"DarkOrchid",  {0.600000 , 0.196078 , 0.800000 }}, | 
| 624 |  |  | {"DarkOrchid1",  {0.749020 , 0.243137 , 1.000000 }}, | 
| 625 |  |  | {"DarkOrchid2",  {0.698039 , 0.227451 , 0.933333 }}, | 
| 626 |  |  | {"DarkOrchid3",  {0.603922 , 0.196078 , 0.803922 }}, | 
| 627 |  |  | {"DarkOrchid4",  {0.407843 , 0.133333 , 0.545098 }}, | 
| 628 |  |  | {"DarkSalmon",  {0.913725 , 0.588235 , 0.478431 }}, | 
| 629 |  |  | {"DarkSeaGreen",  {0.560784 , 0.737255 , 0.560784 }}, | 
| 630 |  |  | {"DarkSeaGreen1",  {0.756863 , 1.000000 , 0.756863 }}, | 
| 631 |  |  | {"DarkSeaGreen2",  {0.705882 , 0.933333 , 0.705882 }}, | 
| 632 |  |  | {"DarkSeaGreen3",  {0.607843 , 0.803922 , 0.607843 }}, | 
| 633 |  |  | {"DarkSeaGreen4",  {0.411765 , 0.545098 , 0.411765 }}, | 
| 634 |  |  | {"DarkSlateBlue",  {0.282353 , 0.239216 , 0.545098 }}, | 
| 635 |  |  | {"DarkSlateGray",  {0.184314 , 0.309804 , 0.309804 }}, | 
| 636 |  |  | {"DarkSlateGray1",  {0.592157 , 1.000000 , 1.000000 }}, | 
| 637 |  |  | {"DarkSlateGray2",  {0.552941 , 0.933333 , 0.933333 }}, | 
| 638 |  |  | {"DarkSlateGray3",  {0.474510 , 0.803922 , 0.803922 }}, | 
| 639 |  |  | {"DarkSlateGray4",  {0.321569 , 0.545098 , 0.545098 }}, | 
| 640 |  |  | {"DarkSlateGrey",  {0.184314 , 0.309804 , 0.309804 }}, | 
| 641 |  |  | {"DarkTurquoise",  {0.000000 , 0.807843 , 0.819608 }}, | 
| 642 |  |  | {"DarkViolet",  {0.580392 , 0.000000 , 0.827451 }}, | 
| 643 |  |  | {"DeepPink",  {1.000000 , 0.078431 , 0.576471 }}, | 
| 644 |  |  | {"DeepPink1",  {1.000000 , 0.078431 , 0.576471 }}, | 
| 645 |  |  | {"DeepPink2",  {0.933333 , 0.070588 , 0.537255 }}, | 
| 646 |  |  | {"DeepPink3",  {0.803922 , 0.062745 , 0.462745 }}, | 
| 647 |  |  | {"DeepPink4",  {0.545098 , 0.039216 , 0.313725 }}, | 
| 648 |  |  | {"DeepSkyBlue",  {0.000000 , 0.749020 , 1.000000 }}, | 
| 649 |  |  | {"DeepSkyBlue1",  {0.000000 , 0.749020 , 1.000000 }}, | 
| 650 |  |  | {"DeepSkyBlue2",  {0.000000 , 0.698039 , 0.933333 }}, | 
| 651 |  |  | {"DeepSkyBlue3",  {0.000000 , 0.603922 , 0.803922 }}, | 
| 652 |  |  | {"DeepSkyBlue4",  {0.000000 , 0.407843 , 0.545098 }}, | 
| 653 |  |  | {"DimGray",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 654 |  |  | {"DimGrey",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 655 |  |  | {"DodgerBlue",  {0.117647 , 0.564706 , 1.000000 }}, | 
| 656 |  |  | {"DodgerBlue1",  {0.117647 , 0.564706 , 1.000000 }}, | 
| 657 |  |  | {"DodgerBlue2",  {0.109804 , 0.525490 , 0.933333 }}, | 
| 658 |  |  | {"DodgerBlue3",  {0.094118 , 0.454902 , 0.803922 }}, | 
| 659 |  |  | {"DodgerBlue4",  {0.062745 , 0.305882 , 0.545098 }}, | 
| 660 |  |  | {"FloralWhite",  {1.000000 , 0.980392 , 0.941176 }}, | 
| 661 |  |  | {"ForestGreen",  {0.133333 , 0.545098 , 0.133333 }}, | 
| 662 |  |  | {"GhostWhite",  {0.972549 , 0.972549 , 1.000000 }}, | 
| 663 |  |  | {"GreenYellow",  {0.678431 , 1.000000 , 0.184314 }}, | 
| 664 |  |  | {"HotPink",  {1.000000 , 0.411765 , 0.705882 }}, | 
| 665 |  |  | {"HotPink1",  {1.000000 , 0.431373 , 0.705882 }}, | 
| 666 |  |  | {"HotPink2",  {0.933333 , 0.415686 , 0.654902 }}, | 
| 667 |  |  | {"HotPink3",  {0.803922 , 0.376471 , 0.564706 }}, | 
| 668 |  |  | {"HotPink4",  {0.545098 , 0.227451 , 0.384314 }}, | 
| 669 |  |  | {"IndianRed",  {0.803922 , 0.360784 , 0.360784 }}, | 
| 670 |  |  | {"IndianRed1",  {1.000000 , 0.415686 , 0.415686 }}, | 
| 671 |  |  | {"IndianRed2",  {0.933333 , 0.388235 , 0.388235 }}, | 
| 672 |  |  | {"IndianRed3",  {0.803922 , 0.333333 , 0.333333 }}, | 
| 673 |  |  | {"IndianRed4",  {0.545098 , 0.227451 , 0.227451 }}, | 
| 674 |  |  | {"LavenderBlush",  {1.000000 , 0.941176 , 0.960784 }}, | 
| 675 |  |  | {"LavenderBlush1",  {1.000000 , 0.941176 , 0.960784 }}, | 
| 676 |  |  | {"LavenderBlush2",  {0.933333 , 0.878431 , 0.898039 }}, | 
| 677 |  |  | {"LavenderBlush3",  {0.803922 , 0.756863 , 0.772549 }}, | 
| 678 |  |  | {"LavenderBlush4",  {0.545098 , 0.513725 , 0.525490 }}, | 
| 679 |  |  | {"LawnGreen",  {0.486275 , 0.988235 , 0.000000 }}, | 
| 680 |  |  | {"LemonChiffon",  {1.000000 , 0.980392 , 0.803922 }}, | 
| 681 |  |  | {"LemonChiffon1",  {1.000000 , 0.980392 , 0.803922 }}, | 
| 682 |  |  | {"LemonChiffon2",  {0.933333 , 0.913725 , 0.749020 }}, | 
| 683 |  |  | {"LemonChiffon3",  {0.803922 , 0.788235 , 0.647059 }}, | 
| 684 |  |  | {"LemonChiffon4",  {0.545098 , 0.537255 , 0.439216 }}, | 
| 685 |  |  | {"LightBlue",  {0.678431 , 0.847059 , 0.901961 }}, | 
| 686 |  |  | {"LightBlue1",  {0.749020 , 0.937255 , 1.000000 }}, | 
| 687 |  |  | {"LightBlue2",  {0.698039 , 0.874510 , 0.933333 }}, | 
| 688 |  |  | {"LightBlue3",  {0.603922 , 0.752941 , 0.803922 }}, | 
| 689 |  |  | {"LightBlue4",  {0.407843 , 0.513725 , 0.545098 }}, | 
| 690 |  |  | {"LightCoral",  {0.941176 , 0.501961 , 0.501961 }}, | 
| 691 |  |  | {"LightCyan",  {0.878431 , 1.000000 , 1.000000 }}, | 
| 692 |  |  | {"LightCyan1",  {0.878431 , 1.000000 , 1.000000 }}, | 
| 693 |  |  | {"LightCyan2",  {0.819608 , 0.933333 , 0.933333 }}, | 
| 694 |  |  | {"LightCyan3",  {0.705882 , 0.803922 , 0.803922 }}, | 
| 695 |  |  | {"LightCyan4",  {0.478431 , 0.545098 , 0.545098 }}, | 
| 696 |  |  | {"LightGoldenrod",  {0.933333 , 0.866667 , 0.509804 }}, | 
| 697 |  |  | {"LightGoldenrod1",  {1.000000 , 0.925490 , 0.545098 }}, | 
| 698 |  |  | {"LightGoldenrod2",  {0.933333 , 0.862745 , 0.509804 }}, | 
| 699 |  |  | {"LightGoldenrod3",  {0.803922 , 0.745098 , 0.439216 }}, | 
| 700 |  |  | {"LightGoldenrod4",  {0.545098 , 0.505882 , 0.298039 }}, | 
| 701 |  |  | {"LightGoldenrodYellow",  {0.980392 , 0.980392 , 0.823529 }}, | 
| 702 |  |  | {"LightGray",  {0.827451 , 0.827451 , 0.827451 }}, | 
| 703 |  |  | {"LightGrey",  {0.827451 , 0.827451 , 0.827451 }}, | 
| 704 |  |  | {"LightPink",  {1.000000 , 0.713725 , 0.756863 }}, | 
| 705 |  |  | {"LightPink1",  {1.000000 , 0.682353 , 0.725490 }}, | 
| 706 |  |  | {"LightPink2",  {0.933333 , 0.635294 , 0.678431 }}, | 
| 707 |  |  | {"LightPink3",  {0.803922 , 0.549020 , 0.584314 }}, | 
| 708 |  |  | {"LightPink4",  {0.545098 , 0.372549 , 0.396078 }}, | 
| 709 |  |  | {"LightSalmon",  {1.000000 , 0.627451 , 0.478431 }}, | 
| 710 |  |  | {"LightSalmon1",  {1.000000 , 0.627451 , 0.478431 }}, | 
| 711 |  |  | {"LightSalmon2",  {0.933333 , 0.584314 , 0.447059 }}, | 
| 712 |  |  | {"LightSalmon3",  {0.803922 , 0.505882 , 0.384314 }}, | 
| 713 |  |  | {"LightSalmon4",  {0.545098 , 0.341176 , 0.258824 }}, | 
| 714 |  |  | {"LightSeaGreen",  {0.125490 , 0.698039 , 0.666667 }}, | 
| 715 |  |  | {"LightSkyBlue",  {0.529412 , 0.807843 , 0.980392 }}, | 
| 716 |  |  | {"LightSkyBlue1",  {0.690196 , 0.886275 , 1.000000 }}, | 
| 717 |  |  | {"LightSkyBlue2",  {0.643137 , 0.827451 , 0.933333 }}, | 
| 718 |  |  | {"LightSkyBlue3",  {0.552941 , 0.713725 , 0.803922 }}, | 
| 719 |  |  | {"LightSkyBlue4",  {0.376471 , 0.482353 , 0.545098 }}, | 
| 720 |  |  | {"LightSlateBlue",  {0.517647 , 0.439216 , 1.000000 }}, | 
| 721 |  |  | {"LightSlateGray",  {0.466667 , 0.533333 , 0.600000 }}, | 
| 722 |  |  | {"LightSlateGrey",  {0.466667 , 0.533333 , 0.600000 }}, | 
| 723 |  |  | {"LightSteelBlue",  {0.690196 , 0.768627 , 0.870588 }}, | 
| 724 |  |  | {"LightSteelBlue1",  {0.792157 , 0.882353 , 1.000000 }}, | 
| 725 |  |  | {"LightSteelBlue2",  {0.737255 , 0.823529 , 0.933333 }}, | 
| 726 |  |  | {"LightSteelBlue3",  {0.635294 , 0.709804 , 0.803922 }}, | 
| 727 |  |  | {"LightSteelBlue4",  {0.431373 , 0.482353 , 0.545098 }}, | 
| 728 |  |  | {"LightYellow",  {1.000000 , 1.000000 , 0.878431 }}, | 
| 729 |  |  | {"LightYellow1",  {1.000000 , 1.000000 , 0.878431 }}, | 
| 730 |  |  | {"LightYellow2",  {0.933333 , 0.933333 , 0.819608 }}, | 
| 731 |  |  | {"LightYellow3",  {0.803922 , 0.803922 , 0.705882 }}, | 
| 732 |  |  | {"LightYellow4",  {0.545098 , 0.545098 , 0.478431 }}, | 
| 733 |  |  | {"LimeGreen",  {0.196078 , 0.803922 , 0.196078 }}, | 
| 734 |  |  | {"MediumAquamarine",  {0.400000 , 0.803922 , 0.666667 }}, | 
| 735 |  |  | {"MediumBlue",  {0.000000 , 0.000000 , 0.803922 }}, | 
| 736 |  |  | {"MediumOrchid",  {0.729412 , 0.333333 , 0.827451 }}, | 
| 737 |  |  | {"MediumOrchid1",  {0.878431 , 0.400000 , 1.000000 }}, | 
| 738 |  |  | {"MediumOrchid2",  {0.819608 , 0.372549 , 0.933333 }}, | 
| 739 |  |  | {"MediumOrchid3",  {0.705882 , 0.321569 , 0.803922 }}, | 
| 740 |  |  | {"MediumOrchid4",  {0.478431 , 0.215686 , 0.545098 }}, | 
| 741 |  |  | {"MediumPurple",  {0.576471 , 0.439216 , 0.858824 }}, | 
| 742 |  |  | {"MediumPurple1",  {0.670588 , 0.509804 , 1.000000 }}, | 
| 743 |  |  | {"MediumPurple2",  {0.623529 , 0.474510 , 0.933333 }}, | 
| 744 |  |  | {"MediumPurple3",  {0.537255 , 0.407843 , 0.803922 }}, | 
| 745 |  |  | {"MediumPurple4",  {0.364706 , 0.278431 , 0.545098 }}, | 
| 746 |  |  | {"MediumSeaGreen",  {0.235294 , 0.701961 , 0.443137 }}, | 
| 747 |  |  | {"MediumSlateBlue",  {0.482353 , 0.407843 , 0.933333 }}, | 
| 748 |  |  | {"MediumSpringGreen",  {0.000000 , 0.980392 , 0.603922 }}, | 
| 749 |  |  | {"MediumTurquoise",  {0.282353 , 0.819608 , 0.800000 }}, | 
| 750 |  |  | {"MediumVioletRed",  {0.780392 , 0.082353 , 0.521569 }}, | 
| 751 |  |  | {"MidnightBlue",  {0.098039 , 0.098039 , 0.439216 }}, | 
| 752 |  |  | {"MintCream",  {0.960784 , 1.000000 , 0.980392 }}, | 
| 753 |  |  | {"MistyRose",  {1.000000 , 0.894118 , 0.882353 }}, | 
| 754 |  |  | {"MistyRose1",  {1.000000 , 0.894118 , 0.882353 }}, | 
| 755 |  |  | {"MistyRose2",  {0.933333 , 0.835294 , 0.823529 }}, | 
| 756 |  |  | {"MistyRose3",  {0.803922 , 0.717647 , 0.709804 }}, | 
| 757 |  |  | {"MistyRose4",  {0.545098 , 0.490196 , 0.482353 }}, | 
| 758 |  |  | {"NavajoWhite",  {1.000000 , 0.870588 , 0.678431 }}, | 
| 759 |  |  | {"NavajoWhite1",  {1.000000 , 0.870588 , 0.678431 }}, | 
| 760 |  |  | {"NavajoWhite2",  {0.933333 , 0.811765 , 0.631373 }}, | 
| 761 |  |  | {"NavajoWhite3",  {0.803922 , 0.701961 , 0.545098 }}, | 
| 762 |  |  | {"NavajoWhite4",  {0.545098 , 0.474510 , 0.368627 }}, | 
| 763 |  |  | {"NavyBlue",  {0.000000 , 0.000000 , 0.501961 }}, | 
| 764 |  |  | {"OldLace",  {0.992157 , 0.960784 , 0.901961 }}, | 
| 765 |  |  | {"OliveDrab",  {0.419608 , 0.556863 , 0.137255 }}, | 
| 766 |  |  | {"OliveDrab1",  {0.752941 , 1.000000 , 0.243137 }}, | 
| 767 |  |  | {"OliveDrab2",  {0.701961 , 0.933333 , 0.227451 }}, | 
| 768 |  |  | {"OliveDrab3",  {0.603922 , 0.803922 , 0.196078 }}, | 
| 769 |  |  | {"OliveDrab4",  {0.411765 , 0.545098 , 0.133333 }}, | 
| 770 |  |  | {"OrangeRed",  {1.000000 , 0.270588 , 0.000000 }}, | 
| 771 |  |  | {"OrangeRed1",  {1.000000 , 0.270588 , 0.000000 }}, | 
| 772 |  |  | {"OrangeRed2",  {0.933333 , 0.250980 , 0.000000 }}, | 
| 773 |  |  | {"OrangeRed3",  {0.803922 , 0.215686 , 0.000000 }}, | 
| 774 |  |  | {"OrangeRed4",  {0.545098 , 0.145098 , 0.000000 }}, | 
| 775 |  |  | {"PaleGoldenrod",  {0.933333 , 0.909804 , 0.666667 }}, | 
| 776 |  |  | {"PaleGreen",  {0.596078 , 0.984314 , 0.596078 }}, | 
| 777 |  |  | {"PaleGreen1",  {0.603922 , 1.000000 , 0.603922 }}, | 
| 778 |  |  | {"PaleGreen2",  {0.564706 , 0.933333 , 0.564706 }}, | 
| 779 |  |  | {"PaleGreen3",  {0.486275 , 0.803922 , 0.486275 }}, | 
| 780 |  |  | {"PaleGreen4",  {0.329412 , 0.545098 , 0.329412 }}, | 
| 781 |  |  | {"PaleTurquoise",  {0.686275 , 0.933333 , 0.933333 }}, | 
| 782 |  |  | {"PaleTurquoise1",  {0.733333 , 1.000000 , 1.000000 }}, | 
| 783 |  |  | {"PaleTurquoise2",  {0.682353 , 0.933333 , 0.933333 }}, | 
| 784 |  |  | {"PaleTurquoise3",  {0.588235 , 0.803922 , 0.803922 }}, | 
| 785 |  |  | {"PaleTurquoise4",  {0.400000 , 0.545098 , 0.545098 }}, | 
| 786 |  |  | {"PaleVioletRed",  {0.858824 , 0.439216 , 0.576471 }}, | 
| 787 |  |  | {"PaleVioletRed1",  {1.000000 , 0.509804 , 0.670588 }}, | 
| 788 |  |  | {"PaleVioletRed2",  {0.933333 , 0.474510 , 0.623529 }}, | 
| 789 |  |  | {"PaleVioletRed3",  {0.803922 , 0.407843 , 0.537255 }}, | 
| 790 |  |  | {"PaleVioletRed4",  {0.545098 , 0.278431 , 0.364706 }}, | 
| 791 |  |  | {"PapayaWhip",  {1.000000 , 0.937255 , 0.835294 }}, | 
| 792 |  |  | {"PeachPuff",  {1.000000 , 0.854902 , 0.725490 }}, | 
| 793 |  |  | {"PeachPuff1",  {1.000000 , 0.854902 , 0.725490 }}, | 
| 794 |  |  | {"PeachPuff2",  {0.933333 , 0.796078 , 0.678431 }}, | 
| 795 |  |  | {"PeachPuff3",  {0.803922 , 0.686275 , 0.584314 }}, | 
| 796 |  |  | {"PeachPuff4",  {0.545098 , 0.466667 , 0.396078 }}, | 
| 797 |  |  | {"PowderBlue",  {0.690196 , 0.878431 , 0.901961 }}, | 
| 798 |  |  | {"RosyBrown",  {0.737255 , 0.560784 , 0.560784 }}, | 
| 799 |  |  | {"RosyBrown1",  {1.000000 , 0.756863 , 0.756863 }}, | 
| 800 |  |  | {"RosyBrown2",  {0.933333 , 0.705882 , 0.705882 }}, | 
| 801 |  |  | {"RosyBrown3",  {0.803922 , 0.607843 , 0.607843 }}, | 
| 802 |  |  | {"RosyBrown4",  {0.545098 , 0.411765 , 0.411765 }}, | 
| 803 |  |  | {"RoyalBlue",  {0.254902 , 0.411765 , 0.882353 }}, | 
| 804 |  |  | {"RoyalBlue1",  {0.282353 , 0.462745 , 1.000000 }}, | 
| 805 |  |  | {"RoyalBlue2",  {0.262745 , 0.431373 , 0.933333 }}, | 
| 806 |  |  | {"RoyalBlue3",  {0.227451 , 0.372549 , 0.803922 }}, | 
| 807 |  |  | {"RoyalBlue4",  {0.152941 , 0.250980 , 0.545098 }}, | 
| 808 |  |  | {"SaddleBrown",  {0.545098 , 0.270588 , 0.074510 }}, | 
| 809 |  |  | {"SandyBrown",  {0.956863 , 0.643137 , 0.376471 }}, | 
| 810 |  |  | {"SeaGreen",  {0.180392 , 0.545098 , 0.341176 }}, | 
| 811 |  |  | {"SeaGreen1",  {0.329412 , 1.000000 , 0.623529 }}, | 
| 812 |  |  | {"SeaGreen2",  {0.305882 , 0.933333 , 0.580392 }}, | 
| 813 |  |  | {"SeaGreen3",  {0.262745 , 0.803922 , 0.501961 }}, | 
| 814 |  |  | {"SeaGreen4",  {0.180392 , 0.545098 , 0.341176 }}, | 
| 815 |  |  | {"SkyBlue",  {0.529412 , 0.807843 , 0.921569 }}, | 
| 816 |  |  | {"SkyBlue1",  {0.529412 , 0.807843 , 1.000000 }}, | 
| 817 |  |  | {"SkyBlue2",  {0.494118 , 0.752941 , 0.933333 }}, | 
| 818 |  |  | {"SkyBlue3",  {0.423529 , 0.650980 , 0.803922 }}, | 
| 819 |  |  | {"SkyBlue4",  {0.290196 , 0.439216 , 0.545098 }}, | 
| 820 |  |  | {"SlateBlue",  {0.415686 , 0.352941 , 0.803922 }}, | 
| 821 |  |  | {"SlateBlue1",  {0.513725 , 0.435294 , 1.000000 }}, | 
| 822 |  |  | {"SlateBlue2",  {0.478431 , 0.403922 , 0.933333 }}, | 
| 823 |  |  | {"SlateBlue3",  {0.411765 , 0.349020 , 0.803922 }}, | 
| 824 |  |  | {"SlateBlue4",  {0.278431 , 0.235294 , 0.545098 }}, | 
| 825 |  |  | {"SlateGray",  {0.439216 , 0.501961 , 0.564706 }}, | 
| 826 |  |  | {"SlateGray1",  {0.776471 , 0.886275 , 1.000000 }}, | 
| 827 |  |  | {"SlateGray2",  {0.725490 , 0.827451 , 0.933333 }}, | 
| 828 |  |  | {"SlateGray3",  {0.623529 , 0.713725 , 0.803922 }}, | 
| 829 |  |  | {"SlateGray4",  {0.423529 , 0.482353 , 0.545098 }}, | 
| 830 |  |  | {"SlateGrey",  {0.439216 , 0.501961 , 0.564706 }}, | 
| 831 |  |  | {"SpringGreen",  {0.000000 , 1.000000 , 0.498039 }}, | 
| 832 |  |  | {"SpringGreen1",  {0.000000 , 1.000000 , 0.498039 }}, | 
| 833 |  |  | {"SpringGreen2",  {0.000000 , 0.933333 , 0.462745 }}, | 
| 834 |  |  | {"SpringGreen3",  {0.000000 , 0.803922 , 0.400000 }}, | 
| 835 |  |  | {"SpringGreen4",  {0.000000 , 0.545098 , 0.270588 }}, | 
| 836 |  |  | {"SteelBlue",  {0.274510 , 0.509804 , 0.705882 }}, | 
| 837 |  |  | {"SteelBlue1",  {0.388235 , 0.721569 , 1.000000 }}, | 
| 838 |  |  | {"SteelBlue2",  {0.360784 , 0.674510 , 0.933333 }}, | 
| 839 |  |  | {"SteelBlue3",  {0.309804 , 0.580392 , 0.803922 }}, | 
| 840 |  |  | {"SteelBlue4",  {0.211765 , 0.392157 , 0.545098 }}, | 
| 841 |  |  | {"VioletRed",  {0.815686 , 0.125490 , 0.564706 }}, | 
| 842 |  |  | {"VioletRed1",  {1.000000 , 0.243137 , 0.588235 }}, | 
| 843 |  |  | {"VioletRed2",  {0.933333 , 0.227451 , 0.549020 }}, | 
| 844 |  |  | {"VioletRed3",  {0.803922 , 0.196078 , 0.470588 }}, | 
| 845 |  |  | {"VioletRed4",  {0.545098 , 0.133333 , 0.321569 }}, | 
| 846 |  |  | {"WhiteSmoke",  {0.960784 , 0.960784 , 0.960784 }}, | 
| 847 |  |  | {"YellowGreen",  {0.603922 , 0.803922 , 0.196078 }}, | 
| 848 |  |  | {"alice_blue",  {0.941176 , 0.972549 , 1.000000 }}, | 
| 849 |  |  | {"antique_white",  {0.980392 , 0.921569 , 0.843137 }}, | 
| 850 |  |  | {"aquamarine",  {0.498039 , 1.000000 , 0.831373 }}, | 
| 851 |  |  | {"aquamarine1",  {0.498039 , 1.000000 , 0.831373 }}, | 
| 852 |  |  | {"aquamarine2",  {0.462745 , 0.933333 , 0.776471 }}, | 
| 853 |  |  | {"aquamarine3",  {0.400000 , 0.803922 , 0.666667 }}, | 
| 854 |  |  | {"aquamarine4",  {0.270588 , 0.545098 , 0.454902 }}, | 
| 855 |  |  | {"azure",  {0.941176 , 1.000000 , 1.000000 }}, | 
| 856 |  |  | {"azure1",  {0.941176 , 1.000000 , 1.000000 }}, | 
| 857 |  |  | {"azure2",  {0.878431 , 0.933333 , 0.933333 }}, | 
| 858 |  |  | {"azure3",  {0.756863 , 0.803922 , 0.803922 }}, | 
| 859 |  |  | {"azure4",  {0.513725 , 0.545098 , 0.545098 }}, | 
| 860 |  |  | {"beige",  {0.960784 , 0.960784 , 0.862745 }}, | 
| 861 |  |  | {"bisque",  {1.000000 , 0.894118 , 0.768627 }}, | 
| 862 |  |  | {"bisque1",  {1.000000 , 0.894118 , 0.768627 }}, | 
| 863 |  |  | {"bisque2",  {0.933333 , 0.835294 , 0.717647 }}, | 
| 864 |  |  | {"bisque3",  {0.803922 , 0.717647 , 0.619608 }}, | 
| 865 |  |  | {"bisque4",  {0.545098 , 0.490196 , 0.419608 }}, | 
| 866 |  |  | {"black",  {0.000000 , 0.000000 , 0.000000 }}, | 
| 867 |  |  | {"blanched_almond",  {1.000000 , 0.921569 , 0.803922 }}, | 
| 868 |  |  | {"blue",  {0.000000 , 0.000000 , 1.000000 }}, | 
| 869 |  |  | {"blue1",  {0.000000 , 0.000000 , 1.000000 }}, | 
| 870 |  |  | {"blue2",  {0.000000 , 0.000000 , 0.933333 }}, | 
| 871 |  |  | {"blue3",  {0.000000 , 0.000000 , 0.803922 }}, | 
| 872 |  |  | {"blue4",  {0.000000 , 0.000000 , 0.545098 }}, | 
| 873 |  |  | {"blue_violet",  {0.541176 , 0.168627 , 0.886275 }}, | 
| 874 |  |  | {"brown",  {0.647059 , 0.164706 , 0.164706 }}, | 
| 875 |  |  | {"brown1",  {1.000000 , 0.250980 , 0.250980 }}, | 
| 876 |  |  | {"brown2",  {0.933333 , 0.231373 , 0.231373 }}, | 
| 877 |  |  | {"brown3",  {0.803922 , 0.200000 , 0.200000 }}, | 
| 878 |  |  | {"brown4",  {0.545098 , 0.137255 , 0.137255 }}, | 
| 879 |  |  | {"burlywood",  {0.870588 , 0.721569 , 0.529412 }}, | 
| 880 |  |  | {"burlywood1",  {1.000000 , 0.827451 , 0.607843 }}, | 
| 881 |  |  | {"burlywood2",  {0.933333 , 0.772549 , 0.568627 }}, | 
| 882 |  |  | {"burlywood3",  {0.803922 , 0.666667 , 0.490196 }}, | 
| 883 |  |  | {"burlywood4",  {0.545098 , 0.450980 , 0.333333 }}, | 
| 884 |  |  | {"cadet_blue",  {0.372549 , 0.619608 , 0.627451 }}, | 
| 885 |  |  | {"chartreuse",  {0.498039 , 1.000000 , 0.000000 }}, | 
| 886 |  |  | {"chartreuse1",  {0.498039 , 1.000000 , 0.000000 }}, | 
| 887 |  |  | {"chartreuse2",  {0.462745 , 0.933333 , 0.000000 }}, | 
| 888 |  |  | {"chartreuse3",  {0.400000 , 0.803922 , 0.000000 }}, | 
| 889 |  |  | {"chartreuse4",  {0.270588 , 0.545098 , 0.000000 }}, | 
| 890 |  |  | {"chocolate",  {0.823529 , 0.411765 , 0.117647 }}, | 
| 891 |  |  | {"chocolate1",  {1.000000 , 0.498039 , 0.141176 }}, | 
| 892 |  |  | {"chocolate2",  {0.933333 , 0.462745 , 0.129412 }}, | 
| 893 |  |  | {"chocolate3",  {0.803922 , 0.400000 , 0.113725 }}, | 
| 894 |  |  | {"chocolate4",  {0.545098 , 0.270588 , 0.074510 }}, | 
| 895 |  |  | {"coral",  {1.000000 , 0.498039 , 0.313725 }}, | 
| 896 |  |  | {"coral1",  {1.000000 , 0.447059 , 0.337255 }}, | 
| 897 |  |  | {"coral2",  {0.933333 , 0.415686 , 0.313725 }}, | 
| 898 |  |  | {"coral3",  {0.803922 , 0.356863 , 0.270588 }}, | 
| 899 |  |  | {"coral4",  {0.545098 , 0.243137 , 0.184314 }}, | 
| 900 |  |  | {"cornflower_blue",  {0.392157 , 0.584314 , 0.929412 }}, | 
| 901 |  |  | {"cornsilk",  {1.000000 , 0.972549 , 0.862745 }}, | 
| 902 |  |  | {"cornsilk1",  {1.000000 , 0.972549 , 0.862745 }}, | 
| 903 |  |  | {"cornsilk2",  {0.933333 , 0.909804 , 0.803922 }}, | 
| 904 |  |  | {"cornsilk3",  {0.803922 , 0.784314 , 0.694118 }}, | 
| 905 |  |  | {"cornsilk4",  {0.545098 , 0.533333 , 0.470588 }}, | 
| 906 |  |  | {"cyan",  {0.000000 , 1.000000 , 1.000000 }}, | 
| 907 |  |  | {"cyan1",  {0.000000 , 1.000000 , 1.000000 }}, | 
| 908 |  |  | {"cyan2",  {0.000000 , 0.933333 , 0.933333 }}, | 
| 909 |  |  | {"cyan3",  {0.000000 , 0.803922 , 0.803922 }}, | 
| 910 |  |  | {"cyan4",  {0.000000 , 0.545098 , 0.545098 }}, | 
| 911 |  |  | {"dark_goldenrod",  {0.721569 , 0.525490 , 0.043137 }}, | 
| 912 |  |  | {"dark_green",  {0.000000 , 0.392157 , 0.000000 }}, | 
| 913 |  |  | {"dark_khaki",  {0.741176 , 0.717647 , 0.419608 }}, | 
| 914 |  |  | {"dark_olive_green",  {0.333333 , 0.419608 , 0.184314 }}, | 
| 915 |  |  | {"dark_orange",  {1.000000 , 0.549020 , 0.000000 }}, | 
| 916 |  |  | {"dark_orchid",  {0.600000 , 0.196078 , 0.800000 }}, | 
| 917 |  |  | {"dark_salmon",  {0.913725 , 0.588235 , 0.478431 }}, | 
| 918 |  |  | {"dark_sea_green",  {0.560784 , 0.737255 , 0.560784 }}, | 
| 919 |  |  | {"dark_slate_blue",  {0.282353 , 0.239216 , 0.545098 }}, | 
| 920 |  |  | {"dark_slate_gray",  {0.184314 , 0.309804 , 0.309804 }}, | 
| 921 |  |  | {"dark_slate_grey",  {0.184314 , 0.309804 , 0.309804 }}, | 
| 922 |  |  | {"dark_turquoise",  {0.000000 , 0.807843 , 0.819608 }}, | 
| 923 |  |  | {"dark_violet",  {0.580392 , 0.000000 , 0.827451 }}, | 
| 924 |  |  | {"deep_pink",  {1.000000 , 0.078431 , 0.576471 }}, | 
| 925 |  |  | {"deep_sky_blue",  {0.000000 , 0.749020 , 1.000000 }}, | 
| 926 |  |  | {"dim_gray",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 927 |  |  | {"dim_grey",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 928 |  |  | {"dodger_blue",  {0.117647 , 0.564706 , 1.000000 }}, | 
| 929 |  |  | {"firebrick",  {0.698039 , 0.133333 , 0.133333 }}, | 
| 930 |  |  | {"firebrick1",  {1.000000 , 0.188235 , 0.188235 }}, | 
| 931 |  |  | {"firebrick2",  {0.933333 , 0.172549 , 0.172549 }}, | 
| 932 |  |  | {"firebrick3",  {0.803922 , 0.149020 , 0.149020 }}, | 
| 933 |  |  | {"firebrick4",  {0.545098 , 0.101961 , 0.101961 }}, | 
| 934 |  |  | {"floral_white",  {1.000000 , 0.980392 , 0.941176 }}, | 
| 935 |  |  | {"forest_green",  {0.133333 , 0.545098 , 0.133333 }}, | 
| 936 |  |  | {"gainsboro",  {0.862745 , 0.862745 , 0.862745 }}, | 
| 937 |  |  | {"ghost_white",  {0.972549 , 0.972549 , 1.000000 }}, | 
| 938 |  |  | {"gold",  {1.000000 , 0.843137 , 0.000000 }}, | 
| 939 |  |  | {"gold1",  {1.000000 , 0.843137 , 0.000000 }}, | 
| 940 |  |  | {"gold2",  {0.933333 , 0.788235 , 0.000000 }}, | 
| 941 |  |  | {"gold3",  {0.803922 , 0.678431 , 0.000000 }}, | 
| 942 |  |  | {"gold4",  {0.545098 , 0.458824 , 0.000000 }}, | 
| 943 |  |  | {"goldenrod",  {0.854902 , 0.647059 , 0.125490 }}, | 
| 944 |  |  | {"goldenrod1",  {1.000000 , 0.756863 , 0.145098 }}, | 
| 945 |  |  | {"goldenrod2",  {0.933333 , 0.705882 , 0.133333 }}, | 
| 946 |  |  | {"goldenrod3",  {0.803922 , 0.607843 , 0.113725 }}, | 
| 947 |  |  | {"goldenrod4",  {0.545098 , 0.411765 , 0.078431 }}, | 
| 948 |  |  | {"gray",  {0.752941 , 0.752941 , 0.752941 }}, | 
| 949 |  |  | {"gray0",  {0.000000 , 0.000000 , 0.000000 }}, | 
| 950 |  |  | {"gray1",  {0.011765 , 0.011765 , 0.011765 }}, | 
| 951 |  |  | {"gray10",  {0.101961 , 0.101961 , 0.101961 }}, | 
| 952 |  |  | {"gray100",  {1.000000 , 1.000000 , 1.000000 }}, | 
| 953 |  |  | {"gray11",  {0.109804 , 0.109804 , 0.109804 }}, | 
| 954 |  |  | {"gray12",  {0.121569 , 0.121569 , 0.121569 }}, | 
| 955 |  |  | {"gray13",  {0.129412 , 0.129412 , 0.129412 }}, | 
| 956 |  |  | {"gray14",  {0.141176 , 0.141176 , 0.141176 }}, | 
| 957 |  |  | {"gray15",  {0.149020 , 0.149020 , 0.149020 }}, | 
| 958 |  |  | {"gray16",  {0.160784 , 0.160784 , 0.160784 }}, | 
| 959 |  |  | {"gray17",  {0.168627 , 0.168627 , 0.168627 }}, | 
| 960 |  |  | {"gray18",  {0.180392 , 0.180392 , 0.180392 }}, | 
| 961 |  |  | {"gray19",  {0.188235 , 0.188235 , 0.188235 }}, | 
| 962 |  |  | {"gray2",  {0.019608 , 0.019608 , 0.019608 }}, | 
| 963 |  |  | {"gray20",  {0.200000 , 0.200000 , 0.200000 }}, | 
| 964 |  |  | {"gray21",  {0.211765 , 0.211765 , 0.211765 }}, | 
| 965 |  |  | {"gray22",  {0.219608 , 0.219608 , 0.219608 }}, | 
| 966 |  |  | {"gray23",  {0.231373 , 0.231373 , 0.231373 }}, | 
| 967 |  |  | {"gray24",  {0.239216 , 0.239216 , 0.239216 }}, | 
| 968 |  |  | {"gray25",  {0.250980 , 0.250980 , 0.250980 }}, | 
| 969 |  |  | {"gray26",  {0.258824 , 0.258824 , 0.258824 }}, | 
| 970 |  |  | {"gray27",  {0.270588 , 0.270588 , 0.270588 }}, | 
| 971 |  |  | {"gray28",  {0.278431 , 0.278431 , 0.278431 }}, | 
| 972 |  |  | {"gray29",  {0.290196 , 0.290196 , 0.290196 }}, | 
| 973 |  |  | {"gray3",  {0.031373 , 0.031373 , 0.031373 }}, | 
| 974 |  |  | {"gray30",  {0.301961 , 0.301961 , 0.301961 }}, | 
| 975 |  |  | {"gray31",  {0.309804 , 0.309804 , 0.309804 }}, | 
| 976 |  |  | {"gray32",  {0.321569 , 0.321569 , 0.321569 }}, | 
| 977 |  |  | {"gray33",  {0.329412 , 0.329412 , 0.329412 }}, | 
| 978 |  |  | {"gray34",  {0.341176 , 0.341176 , 0.341176 }}, | 
| 979 |  |  | {"gray35",  {0.349020 , 0.349020 , 0.349020 }}, | 
| 980 |  |  | {"gray36",  {0.360784 , 0.360784 , 0.360784 }}, | 
| 981 |  |  | {"gray37",  {0.368627 , 0.368627 , 0.368627 }}, | 
| 982 |  |  | {"gray38",  {0.380392 , 0.380392 , 0.380392 }}, | 
| 983 |  |  | {"gray39",  {0.388235 , 0.388235 , 0.388235 }}, | 
| 984 |  |  | {"gray4",  {0.039216 , 0.039216 , 0.039216 }}, | 
| 985 |  |  | {"gray40",  {0.400000 , 0.400000 , 0.400000 }}, | 
| 986 |  |  | {"gray41",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 987 |  |  | {"gray42",  {0.419608 , 0.419608 , 0.419608 }}, | 
| 988 |  |  | {"gray43",  {0.431373 , 0.431373 , 0.431373 }}, | 
| 989 |  |  | {"gray44",  {0.439216 , 0.439216 , 0.439216 }}, | 
| 990 |  |  | {"gray45",  {0.450980 , 0.450980 , 0.450980 }}, | 
| 991 |  |  | {"gray46",  {0.458824 , 0.458824 , 0.458824 }}, | 
| 992 |  |  | {"gray47",  {0.470588 , 0.470588 , 0.470588 }}, | 
| 993 |  |  | {"gray48",  {0.478431 , 0.478431 , 0.478431 }}, | 
| 994 |  |  | {"gray49",  {0.490196 , 0.490196 , 0.490196 }}, | 
| 995 |  |  | {"gray5",  {0.050980 , 0.050980 , 0.050980 }}, | 
| 996 |  |  | {"gray50",  {0.498039 , 0.498039 , 0.498039 }}, | 
| 997 |  |  | {"gray51",  {0.509804 , 0.509804 , 0.509804 }}, | 
| 998 |  |  | {"gray52",  {0.521569 , 0.521569 , 0.521569 }}, | 
| 999 |  |  | {"gray53",  {0.529412 , 0.529412 , 0.529412 }}, | 
| 1000 |  |  | {"gray54",  {0.541176 , 0.541176 , 0.541176 }}, | 
| 1001 |  |  | {"gray55",  {0.549020 , 0.549020 , 0.549020 }}, | 
| 1002 |  |  | {"gray56",  {0.560784 , 0.560784 , 0.560784 }}, | 
| 1003 |  |  | {"gray57",  {0.568627 , 0.568627 , 0.568627 }}, | 
| 1004 |  |  | {"gray58",  {0.580392 , 0.580392 , 0.580392 }}, | 
| 1005 |  |  | {"gray59",  {0.588235 , 0.588235 , 0.588235 }}, | 
| 1006 |  |  | {"gray6",  {0.058824 , 0.058824 , 0.058824 }}, | 
| 1007 |  |  | {"gray60",  {0.600000 , 0.600000 , 0.600000 }}, | 
| 1008 |  |  | {"gray61",  {0.611765 , 0.611765 , 0.611765 }}, | 
| 1009 |  |  | {"gray62",  {0.619608 , 0.619608 , 0.619608 }}, | 
| 1010 |  |  | {"gray63",  {0.631373 , 0.631373 , 0.631373 }}, | 
| 1011 |  |  | {"gray64",  {0.639216 , 0.639216 , 0.639216 }}, | 
| 1012 |  |  | {"gray65",  {0.650980 , 0.650980 , 0.650980 }}, | 
| 1013 |  |  | {"gray66",  {0.658824 , 0.658824 , 0.658824 }}, | 
| 1014 |  |  | {"gray67",  {0.670588 , 0.670588 , 0.670588 }}, | 
| 1015 |  |  | {"gray68",  {0.678431 , 0.678431 , 0.678431 }}, | 
| 1016 |  |  | {"gray69",  {0.690196 , 0.690196 , 0.690196 }}, | 
| 1017 |  |  | {"gray7",  {0.070588 , 0.070588 , 0.070588 }}, | 
| 1018 |  |  | {"gray70",  {0.701961 , 0.701961 , 0.701961 }}, | 
| 1019 |  |  | {"gray71",  {0.709804 , 0.709804 , 0.709804 }}, | 
| 1020 |  |  | {"gray72",  {0.721569 , 0.721569 , 0.721569 }}, | 
| 1021 |  |  | {"gray73",  {0.729412 , 0.729412 , 0.729412 }}, | 
| 1022 |  |  | {"gray74",  {0.741176 , 0.741176 , 0.741176 }}, | 
| 1023 |  |  | {"gray75",  {0.749020 , 0.749020 , 0.749020 }}, | 
| 1024 |  |  | {"gray76",  {0.760784 , 0.760784 , 0.760784 }}, | 
| 1025 |  |  | {"gray77",  {0.768627 , 0.768627 , 0.768627 }}, | 
| 1026 |  |  | {"gray78",  {0.780392 , 0.780392 , 0.780392 }}, | 
| 1027 |  |  | {"gray79",  {0.788235 , 0.788235 , 0.788235 }}, | 
| 1028 |  |  | {"gray8",  {0.078431 , 0.078431 , 0.078431 }}, | 
| 1029 |  |  | {"gray80",  {0.800000 , 0.800000 , 0.800000 }}, | 
| 1030 |  |  | {"gray81",  {0.811765 , 0.811765 , 0.811765 }}, | 
| 1031 |  |  | {"gray82",  {0.819608 , 0.819608 , 0.819608 }}, | 
| 1032 |  |  | {"gray83",  {0.831373 , 0.831373 , 0.831373 }}, | 
| 1033 |  |  | {"gray84",  {0.839216 , 0.839216 , 0.839216 }}, | 
| 1034 |  |  | {"gray85",  {0.850980 , 0.850980 , 0.850980 }}, | 
| 1035 |  |  | {"gray86",  {0.858824 , 0.858824 , 0.858824 }}, | 
| 1036 |  |  | {"gray87",  {0.870588 , 0.870588 , 0.870588 }}, | 
| 1037 |  |  | {"gray88",  {0.878431 , 0.878431 , 0.878431 }}, | 
| 1038 |  |  | {"gray89",  {0.890196 , 0.890196 , 0.890196 }}, | 
| 1039 |  |  | {"gray9",  {0.090196 , 0.090196 , 0.090196 }}, | 
| 1040 |  |  | {"gray90",  {0.898039 , 0.898039 , 0.898039 }}, | 
| 1041 |  |  | {"gray91",  {0.909804 , 0.909804 , 0.909804 }}, | 
| 1042 |  |  | {"gray92",  {0.921569 , 0.921569 , 0.921569 }}, | 
| 1043 |  |  | {"gray93",  {0.929412 , 0.929412 , 0.929412 }}, | 
| 1044 |  |  | {"gray94",  {0.941176 , 0.941176 , 0.941176 }}, | 
| 1045 |  |  | {"gray95",  {0.949020 , 0.949020 , 0.949020 }}, | 
| 1046 |  |  | {"gray96",  {0.960784 , 0.960784 , 0.960784 }}, | 
| 1047 |  |  | {"gray97",  {0.968627 , 0.968627 , 0.968627 }}, | 
| 1048 |  |  | {"gray98",  {0.980392 , 0.980392 , 0.980392 }}, | 
| 1049 |  |  | {"gray99",  {0.988235 , 0.988235 , 0.988235 }}, | 
| 1050 |  |  | {"green",  {0.000000 , 1.000000 , 0.000000 }}, | 
| 1051 |  |  | {"green1",  {0.000000 , 1.000000 , 0.000000 }}, | 
| 1052 |  |  | {"green2",  {0.000000 , 0.933333 , 0.000000 }}, | 
| 1053 |  |  | {"green3",  {0.000000 , 0.803922 , 0.000000 }}, | 
| 1054 |  |  | {"green4",  {0.000000 , 0.545098 , 0.000000 }}, | 
| 1055 |  |  | {"green_yellow",  {0.678431 , 1.000000 , 0.184314 }}, | 
| 1056 |  |  | {"grey",  {0.752941 , 0.752941 , 0.752941 }}, | 
| 1057 |  |  | {"grey0",  {0.000000 , 0.000000 , 0.000000 }}, | 
| 1058 |  |  | {"grey1",  {0.011765 , 0.011765 , 0.011765 }}, | 
| 1059 |  |  | {"grey10",  {0.101961 , 0.101961 , 0.101961 }}, | 
| 1060 |  |  | {"grey100",  {1.000000 , 1.000000 , 1.000000 }}, | 
| 1061 |  |  | {"grey11",  {0.109804 , 0.109804 , 0.109804 }}, | 
| 1062 |  |  | {"grey12",  {0.121569 , 0.121569 , 0.121569 }}, | 
| 1063 |  |  | {"grey13",  {0.129412 , 0.129412 , 0.129412 }}, | 
| 1064 |  |  | {"grey14",  {0.141176 , 0.141176 , 0.141176 }}, | 
| 1065 |  |  | {"grey15",  {0.149020 , 0.149020 , 0.149020 }}, | 
| 1066 |  |  | {"grey16",  {0.160784 , 0.160784 , 0.160784 }}, | 
| 1067 |  |  | {"grey17",  {0.168627 , 0.168627 , 0.168627 }}, | 
| 1068 |  |  | {"grey18",  {0.180392 , 0.180392 , 0.180392 }}, | 
| 1069 |  |  | {"grey19",  {0.188235 , 0.188235 , 0.188235 }}, | 
| 1070 |  |  | {"grey2",  {0.019608 , 0.019608 , 0.019608 }}, | 
| 1071 |  |  | {"grey20",  {0.200000 , 0.200000 , 0.200000 }}, | 
| 1072 |  |  | {"grey21",  {0.211765 , 0.211765 , 0.211765 }}, | 
| 1073 |  |  | {"grey22",  {0.219608 , 0.219608 , 0.219608 }}, | 
| 1074 |  |  | {"grey23",  {0.231373 , 0.231373 , 0.231373 }}, | 
| 1075 |  |  | {"grey24",  {0.239216 , 0.239216 , 0.239216 }}, | 
| 1076 |  |  | {"grey25",  {0.250980 , 0.250980 , 0.250980 }}, | 
| 1077 |  |  | {"grey26",  {0.258824 , 0.258824 , 0.258824 }}, | 
| 1078 |  |  | {"grey27",  {0.270588 , 0.270588 , 0.270588 }}, | 
| 1079 |  |  | {"grey28",  {0.278431 , 0.278431 , 0.278431 }}, | 
| 1080 |  |  | {"grey29",  {0.290196 , 0.290196 , 0.290196 }}, | 
| 1081 |  |  | {"grey3",  {0.031373 , 0.031373 , 0.031373 }}, | 
| 1082 |  |  | {"grey30",  {0.301961 , 0.301961 , 0.301961 }}, | 
| 1083 |  |  | {"grey31",  {0.309804 , 0.309804 , 0.309804 }}, | 
| 1084 |  |  | {"grey32",  {0.321569 , 0.321569 , 0.321569 }}, | 
| 1085 |  |  | {"grey33",  {0.329412 , 0.329412 , 0.329412 }}, | 
| 1086 |  |  | {"grey34",  {0.341176 , 0.341176 , 0.341176 }}, | 
| 1087 |  |  | {"grey35",  {0.349020 , 0.349020 , 0.349020 }}, | 
| 1088 |  |  | {"grey36",  {0.360784 , 0.360784 , 0.360784 }}, | 
| 1089 |  |  | {"grey37",  {0.368627 , 0.368627 , 0.368627 }}, | 
| 1090 |  |  | {"grey38",  {0.380392 , 0.380392 , 0.380392 }}, | 
| 1091 |  |  | {"grey39",  {0.388235 , 0.388235 , 0.388235 }}, | 
| 1092 |  |  | {"grey4",  {0.039216 , 0.039216 , 0.039216 }}, | 
| 1093 |  |  | {"grey40",  {0.400000 , 0.400000 , 0.400000 }}, | 
| 1094 |  |  | {"grey41",  {0.411765 , 0.411765 , 0.411765 }}, | 
| 1095 |  |  | {"grey42",  {0.419608 , 0.419608 , 0.419608 }}, | 
| 1096 |  |  | {"grey43",  {0.431373 , 0.431373 , 0.431373 }}, | 
| 1097 |  |  | {"grey44",  {0.439216 , 0.439216 , 0.439216 }}, | 
| 1098 |  |  | {"grey45",  {0.450980 , 0.450980 , 0.450980 }}, | 
| 1099 |  |  | {"grey46",  {0.458824 , 0.458824 , 0.458824 }}, | 
| 1100 |  |  | {"grey47",  {0.470588 , 0.470588 , 0.470588 }}, | 
| 1101 |  |  | {"grey48",  {0.478431 , 0.478431 , 0.478431 }}, | 
| 1102 |  |  | {"grey49",  {0.490196 , 0.490196 , 0.490196 }}, | 
| 1103 |  |  | {"grey5",  {0.050980 , 0.050980 , 0.050980 }}, | 
| 1104 |  |  | {"grey50",  {0.498039 , 0.498039 , 0.498039 }}, | 
| 1105 |  |  | {"grey51",  {0.509804 , 0.509804 , 0.509804 }}, | 
| 1106 |  |  | {"grey52",  {0.521569 , 0.521569 , 0.521569 }}, | 
| 1107 |  |  | {"grey53",  {0.529412 , 0.529412 , 0.529412 }}, | 
| 1108 |  |  | {"grey54",  {0.541176 , 0.541176 , 0.541176 }}, | 
| 1109 |  |  | {"grey55",  {0.549020 , 0.549020 , 0.549020 }}, | 
| 1110 |  |  | {"grey56",  {0.560784 , 0.560784 , 0.560784 }}, | 
| 1111 |  |  | {"grey57",  {0.568627 , 0.568627 , 0.568627 }}, | 
| 1112 |  |  | {"grey58",  {0.580392 , 0.580392 , 0.580392 }}, | 
| 1113 |  |  | {"grey59",  {0.588235 , 0.588235 , 0.588235 }}, | 
| 1114 |  |  | {"grey6",  {0.058824 , 0.058824 , 0.058824 }}, | 
| 1115 |  |  | {"grey60",  {0.600000 , 0.600000 , 0.600000 }}, | 
| 1116 |  |  | {"grey61",  {0.611765 , 0.611765 , 0.611765 }}, | 
| 1117 |  |  | {"grey62",  {0.619608 , 0.619608 , 0.619608 }}, | 
| 1118 |  |  | {"grey63",  {0.631373 , 0.631373 , 0.631373 }}, | 
| 1119 |  |  | {"grey64",  {0.639216 , 0.639216 , 0.639216 }}, | 
| 1120 |  |  | {"grey65",  {0.650980 , 0.650980 , 0.650980 }}, | 
| 1121 |  |  | {"grey66",  {0.658824 , 0.658824 , 0.658824 }}, | 
| 1122 |  |  | {"grey67",  {0.670588 , 0.670588 , 0.670588 }}, | 
| 1123 |  |  | {"grey68",  {0.678431 , 0.678431 , 0.678431 }}, | 
| 1124 |  |  | {"grey69",  {0.690196 , 0.690196 , 0.690196 }}, | 
| 1125 |  |  | {"grey7",  {0.070588 , 0.070588 , 0.070588 }}, | 
| 1126 |  |  | {"grey70",  {0.701961 , 0.701961 , 0.701961 }}, | 
| 1127 |  |  | {"grey71",  {0.709804 , 0.709804 , 0.709804 }}, | 
| 1128 |  |  | {"grey72",  {0.721569 , 0.721569 , 0.721569 }}, | 
| 1129 |  |  | {"grey73",  {0.729412 , 0.729412 , 0.729412 }}, | 
| 1130 |  |  | {"grey74",  {0.741176 , 0.741176 , 0.741176 }}, | 
| 1131 |  |  | {"grey75",  {0.749020 , 0.749020 , 0.749020 }}, | 
| 1132 |  |  | {"grey76",  {0.760784 , 0.760784 , 0.760784 }}, | 
| 1133 |  |  | {"grey77",  {0.768627 , 0.768627 , 0.768627 }}, | 
| 1134 |  |  | {"grey78",  {0.780392 , 0.780392 , 0.780392 }}, | 
| 1135 |  |  | {"grey79",  {0.788235 , 0.788235 , 0.788235 }}, | 
| 1136 |  |  | {"grey8",  {0.078431 , 0.078431 , 0.078431 }}, | 
| 1137 |  |  | {"grey80",  {0.800000 , 0.800000 , 0.800000 }}, | 
| 1138 |  |  | {"grey81",  {0.811765 , 0.811765 , 0.811765 }}, | 
| 1139 |  |  | {"grey82",  {0.819608 , 0.819608 , 0.819608 }}, | 
| 1140 |  |  | {"grey83",  {0.831373 , 0.831373 , 0.831373 }}, | 
| 1141 |  |  | {"grey84",  {0.839216 , 0.839216 , 0.839216 }}, | 
| 1142 |  |  | {"grey85",  {0.850980 , 0.850980 , 0.850980 }}, | 
| 1143 |  |  | {"grey86",  {0.858824 , 0.858824 , 0.858824 }}, | 
| 1144 |  |  | {"grey87",  {0.870588 , 0.870588 , 0.870588 }}, | 
| 1145 |  |  | {"grey88",  {0.878431 , 0.878431 , 0.878431 }}, | 
| 1146 |  |  | {"grey89",  {0.890196 , 0.890196 , 0.890196 }}, | 
| 1147 |  |  | {"grey9",  {0.090196 , 0.090196 , 0.090196 }}, | 
| 1148 |  |  | {"grey90",  {0.898039 , 0.898039 , 0.898039 }}, | 
| 1149 |  |  | {"grey91",  {0.909804 , 0.909804 , 0.909804 }}, | 
| 1150 |  |  | {"grey92",  {0.921569 , 0.921569 , 0.921569 }}, | 
| 1151 |  |  | {"grey93",  {0.929412 , 0.929412 , 0.929412 }}, | 
| 1152 |  |  | {"grey94",  {0.941176 , 0.941176 , 0.941176 }}, | 
| 1153 |  |  | {"grey95",  {0.949020 , 0.949020 , 0.949020 }}, | 
| 1154 |  |  | {"grey96",  {0.960784 , 0.960784 , 0.960784 }}, | 
| 1155 |  |  | {"grey97",  {0.968627 , 0.968627 , 0.968627 }}, | 
| 1156 |  |  | {"grey98",  {0.980392 , 0.980392 , 0.980392 }}, | 
| 1157 |  |  | {"grey99",  {0.988235 , 0.988235 , 0.988235 }}, | 
| 1158 |  |  | {"honeydew",  {0.941176 , 1.000000 , 0.941176 }}, | 
| 1159 |  |  | {"honeydew1",  {0.941176 , 1.000000 , 0.941176 }}, | 
| 1160 |  |  | {"honeydew2",  {0.878431 , 0.933333 , 0.878431 }}, | 
| 1161 |  |  | {"honeydew3",  {0.756863 , 0.803922 , 0.756863 }}, | 
| 1162 |  |  | {"honeydew4",  {0.513725 , 0.545098 , 0.513725 }}, | 
| 1163 |  |  | {"hot_pink",  {1.000000 , 0.411765 , 0.705882 }}, | 
| 1164 |  |  | {"indian_red",  {0.803922 , 0.360784 , 0.360784 }}, | 
| 1165 |  |  | {"ivory",  {1.000000 , 1.000000 , 0.941176 }}, | 
| 1166 |  |  | {"ivory1",  {1.000000 , 1.000000 , 0.941176 }}, | 
| 1167 |  |  | {"ivory2",  {0.933333 , 0.933333 , 0.878431 }}, | 
| 1168 |  |  | {"ivory3",  {0.803922 , 0.803922 , 0.756863 }}, | 
| 1169 |  |  | {"ivory4",  {0.545098 , 0.545098 , 0.513725 }}, | 
| 1170 |  |  | {"khaki",  {0.941176 , 0.901961 , 0.549020 }}, | 
| 1171 |  |  | {"khaki1",  {1.000000 , 0.964706 , 0.560784 }}, | 
| 1172 |  |  | {"khaki2",  {0.933333 , 0.901961 , 0.521569 }}, | 
| 1173 |  |  | {"khaki3",  {0.803922 , 0.776471 , 0.450980 }}, | 
| 1174 |  |  | {"khaki4",  {0.545098 , 0.525490 , 0.305882 }}, | 
| 1175 |  |  | {"lavender",  {0.901961 , 0.901961 , 0.980392 }}, | 
| 1176 |  |  | {"lavender_blush",  {1.000000 , 0.941176 , 0.960784 }}, | 
| 1177 |  |  | {"lawn_green",  {0.486275 , 0.988235 , 0.000000 }}, | 
| 1178 |  |  | {"lemon_chiffon",  {1.000000 , 0.980392 , 0.803922 }}, | 
| 1179 |  |  | {"light_blue",  {0.678431 , 0.847059 , 0.901961 }}, | 
| 1180 |  |  | {"light_coral",  {0.941176 , 0.501961 , 0.501961 }}, | 
| 1181 |  |  | {"light_cyan",  {0.878431 , 1.000000 , 1.000000 }}, | 
| 1182 |  |  | {"light_goldenrod",  {0.933333 , 0.866667 , 0.509804 }}, | 
| 1183 |  |  | {"light_goldenrod_yellow",  {0.980392 , 0.980392 , 0.823529 }}, | 
| 1184 |  |  | {"light_gray",  {0.827451 , 0.827451 , 0.827451 }}, | 
| 1185 |  |  | {"light_grey",  {0.827451 , 0.827451 , 0.827451 }}, | 
| 1186 |  |  | {"light_pink",  {1.000000 , 0.713725 , 0.756863 }}, | 
| 1187 |  |  | {"light_salmon",  {1.000000 , 0.627451 , 0.478431 }}, | 
| 1188 |  |  | {"light_sea_green",  {0.125490 , 0.698039 , 0.666667 }}, | 
| 1189 |  |  | {"light_sky_blue",  {0.529412 , 0.807843 , 0.980392 }}, | 
| 1190 |  |  | {"light_slate_blue",  {0.517647 , 0.439216 , 1.000000 }}, | 
| 1191 |  |  | {"light_slate_gray",  {0.466667 , 0.533333 , 0.600000 }}, | 
| 1192 |  |  | {"light_slate_grey",  {0.466667 , 0.533333 , 0.600000 }}, | 
| 1193 |  |  | {"light_steel_blue",  {0.690196 , 0.768627 , 0.870588 }}, | 
| 1194 |  |  | {"light_yellow",  {1.000000 , 1.000000 , 0.878431 }}, | 
| 1195 |  |  | {"lime_green",  {0.196078 , 0.803922 , 0.196078 }}, | 
| 1196 |  |  | {"linen",  {0.980392 , 0.941176 , 0.901961 }}, | 
| 1197 |  |  | {"magenta",  {1.000000 , 0.000000 , 1.000000 }}, | 
| 1198 |  |  | {"magenta1",  {1.000000 , 0.000000 , 1.000000 }}, | 
| 1199 |  |  | {"magenta2",  {0.933333 , 0.000000 , 0.933333 }}, | 
| 1200 |  |  | {"magenta3",  {0.803922 , 0.000000 , 0.803922 }}, | 
| 1201 |  |  | {"magenta4",  {0.545098 , 0.000000 , 0.545098 }}, | 
| 1202 |  |  | {"maroon",  {0.690196 , 0.188235 , 0.376471 }}, | 
| 1203 |  |  | {"maroon1",  {1.000000 , 0.203922 , 0.701961 }}, | 
| 1204 |  |  | {"maroon2",  {0.933333 , 0.188235 , 0.654902 }}, | 
| 1205 |  |  | {"maroon3",  {0.803922 , 0.160784 , 0.564706 }}, | 
| 1206 |  |  | {"maroon4",  {0.545098 , 0.109804 , 0.384314 }}, | 
| 1207 |  |  | {"medium_aquamarine",  {0.400000 , 0.803922 , 0.666667 }}, | 
| 1208 |  |  | {"medium_blue",  {0.000000 , 0.000000 , 0.803922 }}, | 
| 1209 |  |  | {"medium_orchid",  {0.729412 , 0.333333 , 0.827451 }}, | 
| 1210 |  |  | {"medium_purple",  {0.576471 , 0.439216 , 0.858824 }}, | 
| 1211 |  |  | {"medium_sea_green",  {0.235294 , 0.701961 , 0.443137 }}, | 
| 1212 |  |  | {"medium_slate_blue",  {0.482353 , 0.407843 , 0.933333 }}, | 
| 1213 |  |  | {"medium_spring_green",  {0.000000 , 0.980392 , 0.603922 }}, | 
| 1214 |  |  | {"medium_turquoise",  {0.282353 , 0.819608 , 0.800000 }}, | 
| 1215 |  |  | {"medium_violet_red",  {0.780392 , 0.082353 , 0.521569 }}, | 
| 1216 |  |  | {"midnight_blue",  {0.098039 , 0.098039 , 0.439216 }}, | 
| 1217 |  |  | {"mint_cream",  {0.960784 , 1.000000 , 0.980392 }}, | 
| 1218 |  |  | {"misty_rose",  {1.000000 , 0.894118 , 0.882353 }}, | 
| 1219 |  |  | {"moccasin",  {1.000000 , 0.894118 , 0.709804 }}, | 
| 1220 |  |  | {"navajo_white",  {1.000000 , 0.870588 , 0.678431 }}, | 
| 1221 |  |  | {"navy",  {0.000000 , 0.000000 , 0.501961 }}, | 
| 1222 |  |  | {"navy_blue",  {0.000000 , 0.000000 , 0.501961 }}, | 
| 1223 |  |  | {"old_lace",  {0.992157 , 0.960784 , 0.901961 }}, | 
| 1224 |  |  | {"olive_drab",  {0.419608 , 0.556863 , 0.137255 }}, | 
| 1225 |  |  | {"orange",  {1.000000 , 0.647059 , 0.000000 }}, | 
| 1226 |  |  | {"orange1",  {1.000000 , 0.647059 , 0.000000 }}, | 
| 1227 |  |  | {"orange2",  {0.933333 , 0.603922 , 0.000000 }}, | 
| 1228 |  |  | {"orange3",  {0.803922 , 0.521569 , 0.000000 }}, | 
| 1229 |  |  | {"orange4",  {0.545098 , 0.352941 , 0.000000 }}, | 
| 1230 |  |  | {"orange_red",  {1.000000 , 0.270588 , 0.000000 }}, | 
| 1231 |  |  | {"orchid",  {0.854902 , 0.439216 , 0.839216 }}, | 
| 1232 |  |  | {"orchid1",  {1.000000 , 0.513725 , 0.980392 }}, | 
| 1233 |  |  | {"orchid2",  {0.933333 , 0.478431 , 0.913725 }}, | 
| 1234 |  |  | {"orchid3",  {0.803922 , 0.411765 , 0.788235 }}, | 
| 1235 |  |  | {"orchid4",  {0.545098 , 0.278431 , 0.537255 }}, | 
| 1236 |  |  | {"pale_goldenrod",  {0.933333 , 0.909804 , 0.666667 }}, | 
| 1237 |  |  | {"pale_green",  {0.596078 , 0.984314 , 0.596078 }}, | 
| 1238 |  |  | {"pale_turquoise",  {0.686275 , 0.933333 , 0.933333 }}, | 
| 1239 |  |  | {"pale_violet_red",  {0.858824 , 0.439216 , 0.576471 }}, | 
| 1240 |  |  | {"papaya_whip",  {1.000000 , 0.937255 , 0.835294 }}, | 
| 1241 |  |  | {"peach_puff",  {1.000000 , 0.854902 , 0.725490 }}, | 
| 1242 |  |  | {"peru",  {0.803922 , 0.521569 , 0.247059 }}, | 
| 1243 |  |  | {"pink",  {1.000000 , 0.752941 , 0.796078 }}, | 
| 1244 |  |  | {"pink1",  {1.000000 , 0.709804 , 0.772549 }}, | 
| 1245 |  |  | {"pink2",  {0.933333 , 0.662745 , 0.721569 }}, | 
| 1246 |  |  | {"pink3",  {0.803922 , 0.568627 , 0.619608 }}, | 
| 1247 |  |  | {"pink4",  {0.545098 , 0.388235 , 0.423529 }}, | 
| 1248 |  |  | {"plum",  {0.866667 , 0.627451 , 0.866667 }}, | 
| 1249 |  |  | {"plum1",  {1.000000 , 0.733333 , 1.000000 }}, | 
| 1250 |  |  | {"plum2",  {0.933333 , 0.682353 , 0.933333 }}, | 
| 1251 |  |  | {"plum3",  {0.803922 , 0.588235 , 0.803922 }}, | 
| 1252 |  |  | {"plum4",  {0.545098 , 0.400000 , 0.545098 }}, | 
| 1253 |  |  | {"powder_blue",  {0.690196 , 0.878431 , 0.901961 }}, | 
| 1254 |  |  | {"purple",  {0.627451 , 0.125490 , 0.941176 }}, | 
| 1255 |  |  | {"purple1",  {0.607843 , 0.188235 , 1.000000 }}, | 
| 1256 |  |  | {"purple2",  {0.568627 , 0.172549 , 0.933333 }}, | 
| 1257 |  |  | {"purple3",  {0.490196 , 0.149020 , 0.803922 }}, | 
| 1258 |  |  | {"purple4",  {0.333333 , 0.101961 , 0.545098 }}, | 
| 1259 |  |  | {"red",  {1.000000 , 0.000000 , 0.000000 }}, | 
| 1260 |  |  | {"red1",  {1.000000 , 0.000000 , 0.000000 }}, | 
| 1261 |  |  | {"red2",  {0.933333 , 0.000000 , 0.000000 }}, | 
| 1262 |  |  | {"red3",  {0.803922 , 0.000000 , 0.000000 }}, | 
| 1263 |  |  | {"red4",  {0.545098 , 0.000000 , 0.000000 }}, | 
| 1264 |  |  | {"rosy_brown",  {0.737255 , 0.560784 , 0.560784 }}, | 
| 1265 |  |  | {"royal_blue",  {0.254902 , 0.411765 , 0.882353 }}, | 
| 1266 |  |  | {"saddle_brown",  {0.545098 , 0.270588 , 0.074510 }}, | 
| 1267 |  |  | {"salmon",  {0.980392 , 0.501961 , 0.447059 }}, | 
| 1268 |  |  | {"salmon1",  {1.000000 , 0.549020 , 0.411765 }}, | 
| 1269 |  |  | {"salmon2",  {0.933333 , 0.509804 , 0.384314 }}, | 
| 1270 |  |  | {"salmon3",  {0.803922 , 0.439216 , 0.329412 }}, | 
| 1271 |  |  | {"salmon4",  {0.545098 , 0.298039 , 0.223529 }}, | 
| 1272 |  |  | {"sandy_brown",  {0.956863 , 0.643137 , 0.376471 }}, | 
| 1273 |  |  | {"sea_green",  {0.180392 , 0.545098 , 0.341176 }}, | 
| 1274 |  |  | {"seashell",  {1.000000 , 0.960784 , 0.933333 }}, | 
| 1275 |  |  | {"seashell1",  {1.000000 , 0.960784 , 0.933333 }}, | 
| 1276 |  |  | {"seashell2",  {0.933333 , 0.898039 , 0.870588 }}, | 
| 1277 |  |  | {"seashell3",  {0.803922 , 0.772549 , 0.749020 }}, | 
| 1278 |  |  | {"seashell4",  {0.545098 , 0.525490 , 0.509804 }}, | 
| 1279 |  |  | {"sienna",  {0.627451 , 0.321569 , 0.176471 }}, | 
| 1280 |  |  | {"sienna1",  {1.000000 , 0.509804 , 0.278431 }}, | 
| 1281 |  |  | {"sienna2",  {0.933333 , 0.474510 , 0.258824 }}, | 
| 1282 |  |  | {"sienna3",  {0.803922 , 0.407843 , 0.223529 }}, | 
| 1283 |  |  | {"sienna4",  {0.545098 , 0.278431 , 0.149020 }}, | 
| 1284 |  |  | {"sky_blue",  {0.529412 , 0.807843 , 0.921569 }}, | 
| 1285 |  |  | {"slate_blue",  {0.415686 , 0.352941 , 0.803922 }}, | 
| 1286 |  |  | {"slate_gray",  {0.439216 , 0.501961 , 0.564706 }}, | 
| 1287 |  |  | {"slate_grey",  {0.439216 , 0.501961 , 0.564706 }}, | 
| 1288 |  |  | {"snow",  {1.000000 , 0.980392 , 0.980392 }}, | 
| 1289 |  |  | {"snow1",  {1.000000 , 0.980392 , 0.980392 }}, | 
| 1290 |  |  | {"snow2",  {0.933333 , 0.913725 , 0.913725 }}, | 
| 1291 |  |  | {"snow3",  {0.803922 , 0.788235 , 0.788235 }}, | 
| 1292 |  |  | {"snow4",  {0.545098 , 0.537255 , 0.537255 }}, | 
| 1293 |  |  | {"spring_green",  {0.000000 , 1.000000 , 0.498039 }}, | 
| 1294 |  |  | {"steel_blue",  {0.274510 , 0.509804 , 0.705882 }}, | 
| 1295 |  |  | {"tan",  {0.823529 , 0.705882 , 0.549020 }}, | 
| 1296 |  |  | {"tan1",  {1.000000 , 0.647059 , 0.309804 }}, | 
| 1297 |  |  | {"tan2",  {0.933333 , 0.603922 , 0.286275 }}, | 
| 1298 |  |  | {"tan3",  {0.803922 , 0.521569 , 0.247059 }}, | 
| 1299 |  |  | {"tan4",  {0.545098 , 0.352941 , 0.168627 }}, | 
| 1300 |  |  | {"thistle",  {0.847059 , 0.749020 , 0.847059 }}, | 
| 1301 |  |  | {"thistle1",  {1.000000 , 0.882353 , 1.000000 }}, | 
| 1302 |  |  | {"thistle2",  {0.933333 , 0.823529 , 0.933333 }}, | 
| 1303 |  |  | {"thistle3",  {0.803922 , 0.709804 , 0.803922 }}, | 
| 1304 |  |  | {"thistle4",  {0.545098 , 0.482353 , 0.545098 }}, | 
| 1305 |  |  | {"tomato",  {1.000000 , 0.388235 , 0.278431 }}, | 
| 1306 |  |  | {"tomato1",  {1.000000 , 0.388235 , 0.278431 }}, | 
| 1307 |  |  | {"tomato2",  {0.933333 , 0.360784 , 0.258824 }}, | 
| 1308 |  |  | {"tomato3",  {0.803922 , 0.309804 , 0.223529 }}, | 
| 1309 |  |  | {"tomato4",  {0.545098 , 0.211765 , 0.149020 }}, | 
| 1310 |  |  | {"turquoise",  {0.250980 , 0.878431 , 0.815686 }}, | 
| 1311 |  |  | {"turquoise1",  {0.000000 , 0.960784 , 1.000000 }}, | 
| 1312 |  |  | {"turquoise2",  {0.000000 , 0.898039 , 0.933333 }}, | 
| 1313 |  |  | {"turquoise3",  {0.000000 , 0.772549 , 0.803922 }}, | 
| 1314 |  |  | {"turquoise4",  {0.000000 , 0.525490 , 0.545098 }}, | 
| 1315 |  |  | {"violet",  {0.933333 , 0.509804 , 0.933333 }}, | 
| 1316 |  |  | {"violet_red",  {0.815686 , 0.125490 , 0.564706 }}, | 
| 1317 |  |  | {"wheat",  {0.960784 , 0.870588 , 0.701961 }}, | 
| 1318 |  |  | {"wheat1",  {1.000000 , 0.905882 , 0.729412 }}, | 
| 1319 |  |  | {"wheat2",  {0.933333 , 0.847059 , 0.682353 }}, | 
| 1320 |  |  | {"wheat3",  {0.803922 , 0.729412 , 0.588235 }}, | 
| 1321 |  |  | {"wheat4",  {0.545098 , 0.494118 , 0.400000 }}, | 
| 1322 |  |  | {"white",  {1.000000 , 1.000000 , 1.000000 }}, | 
| 1323 |  |  | {"white_smoke",  {0.960784 , 0.960784 , 0.960784 }}, | 
| 1324 |  |  | {"yellow",  {1.000000 , 1.000000 , 0.000000 }}, | 
| 1325 |  |  | {"yellow1",  {1.000000 , 1.000000 , 0.000000 }}, | 
| 1326 |  |  | {"yellow2",  {0.933333 , 0.933333 , 0.000000 }}, | 
| 1327 |  |  | {"yellow3",  {0.803922 , 0.803922 , 0.000000 }}, | 
| 1328 |  |  | {"yellow4",  {0.545098 , 0.545098 , 0.000000 }}, | 
| 1329 |  |  | {"yellow_green",  {0.603922 , 0.803922 , 0.196078} } | 
| 1330 | greg | 2.2 | } ; | 
| 1331 |  |  |  | 
| 1332 |  |  | int | 
| 1333 |  |  | LookupColorByName(name, color) | 
| 1334 |  |  | char * name ; | 
| 1335 |  |  | Vec color ; | 
| 1336 |  |  | { | 
| 1337 |  |  | int rc ; | 
| 1338 |  |  | rc = BinarySearch(name, 0, NCOLORS - 1 , Colors) ; | 
| 1339 |  |  | if (rc < 0) { | 
| 1340 |  |  | return(0) ; | 
| 1341 |  |  | } | 
| 1342 |  |  |  | 
| 1343 |  |  | VecCopy(Colors[rc].ce_color, color) ; | 
| 1344 |  |  | return 1 ; | 
| 1345 |  |  | } | 
| 1346 |  |  |  | 
| 1347 |  |  |  | 
| 1348 |  |  | int | 
| 1349 |  |  | BinarySearch(name, l, h, array) | 
| 1350 |  |  | char * name ; | 
| 1351 |  |  | int l, h ; | 
| 1352 |  |  | ColorEntry array[] ; | 
| 1353 |  |  | { | 
| 1354 |  |  | int m, rc ; | 
| 1355 |  |  | if (l > h) | 
| 1356 |  |  | return(-1) ; | 
| 1357 |  |  |  | 
| 1358 |  |  | m = (l + h) / 2 ; | 
| 1359 |  |  |  | 
| 1360 |  |  | rc = strcmp(name, array[m].ce_name) ; | 
| 1361 |  |  | if (rc == 0) | 
| 1362 |  |  | return m ; | 
| 1363 |  |  | else if (rc < 0) | 
| 1364 |  |  | return BinarySearch(name, l, m-1, array) ; | 
| 1365 |  |  | else | 
| 1366 |  |  | return BinarySearch(name, m + 1, h, array) ; | 
| 1367 | greg | 1.1 | } |