/******************************************************************** * class for contour colorbar * * Example: import colorbar_class; C = new ColorBar; C.gr2mg16(0, 10); C.show(); * ********************************************************************/ load("zegraph.dll"); class ColorBar { c_colorbar = zegraph("colorbar"); c_font = zegraph("font"); c_colorbar.font(c_font, 10); c_colorbar.color(0, 0, 0); c_nlev = 0; c_dv = 1; // to be called by other functions function initialize(r, g, b, min, max, discrete) { c_colorbar.clear(); c_colorbar.discrete(discrete); global:c_nlev = size(r); global:c_dv = real(max - min) / (c_nlev - 1); if (discrete) global:c_dv = real(max - min) / c_nlev; for (i = 0; i < c_nlev; i++) c_colorbar.add(r[i], g[i], b[i], min+i*c_dv); if (discrete) c_colorbar.add(r[c_nlev-1], g[c_nlev-1], b[c_nlev-1], max); } // set contour colors function set(r, g, b, min, max, discrete=true, interpolate=0, digit=1, position=[0.85, 0.15, 0.02, 0.7]) { initialize(r, g, b, min, max, discrete); c_colorbar.position(position[0], position[1], position[2], position[3]); assert(digit >= 0); c_colorbar.labeldigits(digit); assert(interpolate >= 0); c_colorbar.interpolate(interpolate); } // get contour color for the value function get(v) { return c_colorbar.get(v); } // set colorbar position function position(xoffset, yoffset, width, height) { c_colorbar.position(xoffset, yoffset, width, height); } // set font function font(size=10, truetype="") { assert(size > 4); if (truetype != "") c_font.truetype(truetype); c_plot.font(size); } // Blue to Dark Orange, 8 steps function bl2do8(min, max, discrete=true) { r = [0.030, 0.350, 0.750, 0.970, 1.000, 1.000, 1.000, 0.800]; g = [0.353, 0.567, 0.833, 0.980, 1.000, 0.800, 0.600, 0.000]; b = [0.900, 1.000, 1.000, 1.000, 0.600, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Blue to Dark Orange, 10 steps function bl2do10(min, max, discrete=true) { r = [0.000, 0.030, 0.350, 0.750, 0.970, 1.000, 1.000, 1.000, 0.800, 0.500]; g = [0.000, 0.353, 0.567, 0.833, 0.980, 1.000, 0.800, 0.600, 0.000, 0.000]; b = [0.600, 0.900, 1.000, 1.000, 1.000, 0.600, 0.000, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Dark cyan to brown, 8 steps function dc2br8(min, max, discrete=true) { r = [0.000, 0.000, 0.705, 0.812, 1.000, 1.000, 0.800, 0.400]; g = [0.500, 0.800, 0.902, 0.906, 0.680, 0.433, 0.333, 0.153]; b = [0.500, 0.800, 0.999, 0.906, 0.400, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Dark Cyan to Brown, 10 steps function dc2br10(min, max, discrete=true) { r = [0.000, 0.000, 0.200, 0.600, 0.800, 1.000, 1.000, 1.000, 0.800, 0.400]; g = [0.500, 0.800, 1.000, 1.000, 1.000, 0.900, 0.680, 0.433, 0.333, 0.153]; b = [0.500, 0.800, 1.000, 1.000, 1.000, 0.800, 0.400, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Dark Cyan to Brown, 18 steps function dc2br18(min, max, discrete=true) { r = [0.000, 0.000, 0.000, 0.000, 0.200, 0.400, 0.600, 0.700, 0.800, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 0.800, 0.600, 0.400]; g = [0.400, 0.600, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.900, 0.793, 0.680, 0.560, 0.433, 0.333, 0.240, 0.153]; b = [0.400, 0.600, 0.800, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.800, 0.600, 0.400, 0.200, 0.000, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Dark slate gray to brown, 8 steps function ds2br8(min, max, discrete=true) { r = [0.000, 0.000, 0.000, 0.600, 1.000, 1.000, 0.700, 0.400]; g = [0.200, 0.400, 0.600, 1.000, 1.000, 0.560, 0.333, 0.153]; b = [0.200, 0.400, 0.600, 1.000, 0.600, 0.200, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Green to Magenta, 16 steps function gr2mg16(min, max, discrete=true) { r = [0.000, 0.000, 0.000, 0.000, 0.316, 0.526, 0.737, 1.000, 1.000, 1.000, 1.000, 1.000, 0.947, 0.737, 0.526, 0.316]; g = [0.316, 0.526, 0.737, 0.947, 1.000, 1.000, 1.000, 1.000, 0.947, 0.737, 0.526, 0.316, 0.000, 0.000, 0.000, 0.000]; b = [0.000, 0.000, 0.000, 0.000, 0.316, 0.526, 0.737, 1.000, 1.000, 1.000, 1.000, 1.000, 0.947, 0.737, 0.526, 0.316]; initialize(r, g, b, min, max, discrete); } // Blue to Dark Red, 18 steps function bl2dr18(min, max, discrete=true) { r = [0.142, 0.097, 0.160, 0.240, 0.340, 0.460, 0.600, 0.740, 0.920, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.970, 0.850, 0.650]; g = [0.000, 0.112, 0.342, 0.531, 0.692, 0.829, 0.920, 0.978, 1.000, 1.000, 0.948, 0.840, 0.676, 0.472, 0.240, 0.155, 0.085, 0.000]; b = [0.850, 0.970, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.920, 0.740, 0.600, 0.460, 0.340, 0.240, 0.210, 0.187, 0.130]; initialize(r, g, b, min, max, discrete); } // Blue to Green, 14 steps function bl2gr14(min, max, discrete=true) { r = [0.000, 0.200, 0.400, 0.600, 0.700, 0.800, 0.900, 0.900, 0.800, 0.700, 0.600, 0.400, 0.200, 0.000]; g = [0.000, 0.200, 0.400, 0.600, 0.700, 0.800, 0.900, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000]; b = [1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.900, 0.800, 0.700, 0.600, 0.400, 0.200, 0.000]; initialize(r, g, b, min, max, discrete); } // Brown to Blue, 12 steps function br2bl12(min, max, discrete=true) { r = [0.200, 0.400, 0.600, 0.800, 0.850, 0.950, 0.800, 0.600, 0.400, 0.200, 0.000, 0.000]; g = [0.100, 0.187, 0.379, 0.608, 0.688, 0.855, 0.993, 0.973, 0.940, 0.893, 0.667, 0.480]; b = [0.000, 0.000, 0.210, 0.480, 0.595, 0.808, 1.000, 1.000, 1.000, 1.000, 0.800, 0.600]; initialize(r, g, b, min, max, discrete); } // Blue to Orange Red, 14 steps function bl2or14(min, max, discrete=true) { r = [0.030, 0.200, 0.350, 0.550, 0.750, 0.900, 0.970, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000]; g = [0.353, 0.467, 0.567, 0.700, 0.833, 0.933, 0.980, 1.000, 1.000, 1.000, 0.800, 0.600, 0.400, 0.000]; b = [1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 0.800, 0.600, 0.000, 0.000, 0.000, 0.000, 0.000]; initialize(r, g, b, min, max, discrete); } // Paired categorical scheme, 12-step function pair12(min, max, discrete=true) { r = [1.000, 1.000, 1.000, 1.000, 0.700, 0.200, 0.650, 0.100, 0.800, 0.400, 1.000, 0.900]; g = [0.750, 0.500, 1.000, 1.000, 1.000, 1.000, 0.930, 0.700, 0.750, 0.300, 0.600, 0.100]; b = [0.500, 0.000, 0.600, 0.200, 0.550, 0.000, 1.000, 1.000, 1.000, 1.000, 0.750, 0.200]; initialize(r, g, b, min, max, discrete); } // show colorbar function show(w=800, h=300) { render = zegraph("render"); render.size(w, h); scene = zegraph("scene"); scene.viewport(0, 0, w, h); render.add(scene); root = zegraph("node"); scene.root(root); root.add(c_colorbar); c_colorbar.position(.1, .5, .8, .05); window(w, h, "callback"); function callback(hwnd, msg, wp, hwp, lwp, lp, hlp, llp) { if (msg == "PAINT") { render.towindow(hwnd); } else if (msg == "SIZE") { hide(); } } } }