UNPKG

@quartic/bokehjs

Version:

Interactive, novel data visualization

144 lines (143 loc) 5.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var color_1 = require("core/util/color"); exports.BaseGLGlyph = (function () { BaseGLGlyph.prototype.GLYPH = ''; BaseGLGlyph.prototype.VERT = ''; BaseGLGlyph.prototype.FRAG = ''; function BaseGLGlyph(gl, glyph) { this.gl = gl; this.glyph = glyph; this.nvertices = 0; this.size_changed = false; this.data_changed = false; this.visuals_changed = false; this.init(); } BaseGLGlyph.prototype.set_data_changed = function (n) { if (n !== this.nvertices) { this.nvertices = n; this.size_changed = true; } return this.data_changed = true; }; BaseGLGlyph.prototype.set_visuals_changed = function () { return this.visuals_changed = true; }; BaseGLGlyph.prototype.render = function (ctx, indices, mainglyph) { var dx, dy, ref, ref1, ref2, sx, sy, trans, wx, wy; wx = wy = 1; ref = this.glyph.renderer.map_to_screen([0 * wx, 1 * wx, 2 * wx], [0 * wy, 1 * wy, 2 * wy]), dx = ref[0], dy = ref[1]; wx = 100 / Math.min(Math.max(Math.abs(dx[1] - dx[0]), 1e-12), 1e12); wy = 100 / Math.min(Math.max(Math.abs(dy[1] - dy[0]), 1e-12), 1e12); ref1 = this.glyph.renderer.map_to_screen([0 * wx, 1 * wx, 2 * wx], [0 * wy, 1 * wy, 2 * wy]), dx = ref1[0], dy = ref1[1]; if (Math.abs((dx[1] - dx[0]) - (dx[2] - dx[1])) > 1e-6 || Math.abs((dy[1] - dy[0]) - (dy[2] - dy[1])) > 1e-6) { return false; } ref2 = [(dx[1] - dx[0]) / wx, (dy[1] - dy[0]) / wy], sx = ref2[0], sy = ref2[1]; trans = { pixel_ratio: ctx.pixel_ratio, width: ctx.glcanvas.width, height: ctx.glcanvas.height, dx: dx[0] / sx, dy: dy[0] / sy, sx: sx, sy: sy }; this.draw(indices, mainglyph, trans); return true; }; return BaseGLGlyph; })(); exports.line_width = function (width) { if (width < 2) { width = Math.sqrt(width * 2); } return width; }; exports.fill_array_with_float = function (n, val) { var a, i, k, ref; a = new Float32Array(n); for (i = k = 0, ref = n; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { a[i] = val; } return a; }; exports.fill_array_with_vec = function (n, m, val) { var a, i, j, k, l, ref, ref1; a = new Float32Array(n * m); for (i = k = 0, ref = n; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { for (j = l = 0, ref1 = m; 0 <= ref1 ? l < ref1 : l > ref1; j = 0 <= ref1 ? ++l : --l) { a[i * m + j] = val[j]; } } return a; }; exports.visual_prop_is_singular = function (visual, propname) { return visual[propname].spec.value !== void 0; }; exports.attach_float = function (prog, vbo, att_name, n, visual, name) { var a; if (!visual.doit) { vbo.used = false; return prog.set_attribute(att_name, 'float', [0]); } else if (exports.visual_prop_is_singular(visual, name)) { vbo.used = false; return prog.set_attribute(att_name, 'float', visual[name].value()); } else { vbo.used = true; a = new Float32Array(visual.cache[name + '_array']); vbo.set_size(n * 4); vbo.set_data(0, a); return prog.set_attribute(att_name, 'float', vbo); } }; exports.attach_color = function (prog, vbo, att_name, n, visual, prefix) { var a, alphaname, alphas, colorname, colors, i, j, k, l, m, ref, ref1, rgba; m = 4; colorname = prefix + '_color'; alphaname = prefix + '_alpha'; if (!visual.doit) { vbo.used = false; return prog.set_attribute(att_name, 'vec4', [0, 0, 0, 0]); } else if (exports.visual_prop_is_singular(visual, colorname) && exports.visual_prop_is_singular(visual, alphaname)) { vbo.used = false; rgba = color_1.color2rgba(visual[colorname].value(), visual[alphaname].value()); return prog.set_attribute(att_name, 'vec4', rgba); } else { vbo.used = true; if (exports.visual_prop_is_singular(visual, colorname)) { colors = (function () { var k, ref, results; results = []; for (i = k = 0, ref = n; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { results.push(visual[colorname].value()); } return results; })(); } else { colors = visual.cache[colorname + '_array']; } if (exports.visual_prop_is_singular(visual, alphaname)) { alphas = exports.fill_array_with_float(n, visual[alphaname].value()); } else { alphas = visual.cache[alphaname + '_array']; } a = new Float32Array(n * m); for (i = k = 0, ref = n; 0 <= ref ? k < ref : k > ref; i = 0 <= ref ? ++k : --k) { rgba = color_1.color2rgba(colors[i], alphas[i]); for (j = l = 0, ref1 = m; 0 <= ref1 ? l < ref1 : l > ref1; j = 0 <= ref1 ? ++l : --l) { a[i * m + j] = rgba[j]; } } vbo.set_size(n * m * 4); vbo.set_data(0, a); return prog.set_attribute(att_name, 'vec4', vbo); } };