/** This file contains methods to take a string and return a consistent color that corresponds to that string. The string does not say anything about the color; the color is returned from a hash code of the string. This is basically a lazy way to obtain "random" colors that remain consistent across runs of a program. To obtain a different color scheme, you can append another value consistently to each string. For example, appending " 16" to each string can be found experimentally to give a good color scheme for your strings. */ /** This function turns a string into a repeatable color as a Frink color object. */ hashColor[str] := { [r,g,b] = hashColorToIntRGB[str] return new color[r/255, g/255, b/255] } /** This function turns a string ito a repeatable color from 0 to 255 as integers [r,g,b] */ hashColorToIntRGB[str] := { hash = right[messageDigest[str, "MD5"], 6] r = parseInt[substrLen[hash, 0, 2], 16] g = parseInt[substrLen[hash, 2, 2], 16] b = parseInt[substrLen[hash, 4, 2], 16] return [r,g,b] } /** This function turns a string into a repeatable color as a hexadecimal string like 'FF10CC". You may want to preface this with a pound sign # to make this an HTML color. */ hashColorToHex[str] := { [r,g,b] = hashColorToIntRGB[str] return padLeft[hex[r], 2, "0"] + padLeft[hex[g], 2, "0"] + padLeft[hex[b], 2, "0"] } /** g = new graphics g.backgroundColor[hashColor["mars"]] g.show[] */