@bokeh/bokehjs
Version:
Interactive, novel data visualization
293 lines • 7.61 kB
JavaScript
const SQ3 = Math.sqrt(3);
const SQ5 = Math.sqrt(5);
const c36 = (SQ5 + 1) / 4;
const s36 = Math.sqrt((5 - SQ5) / 8);
const c72 = (SQ5 - 1) / 4;
const s72 = Math.sqrt((5 + SQ5) / 8);
function _one_line(ctx, r) {
ctx.moveTo(-r, 0);
ctx.lineTo(r, 0);
}
function _one_x(ctx, r) {
ctx.rotate(Math.PI / 4);
_one_cross(ctx, r);
ctx.rotate(-Math.PI / 4);
}
function _one_y(ctx, r) {
const h = r * SQ3;
const a = h / 3;
ctx.moveTo(-h / 2, -a);
ctx.lineTo(0, 0);
ctx.lineTo(h / 2, -a);
ctx.lineTo(0, 0);
ctx.lineTo(0, r);
}
function _one_cross(ctx, r) {
ctx.moveTo(0, r);
ctx.lineTo(0, -r);
ctx.moveTo(-r, 0);
ctx.lineTo(r, 0);
}
function _one_dot(ctx, r) {
ctx.beginPath();
ctx.arc(0, 0, r / 4, 0, 2 * Math.PI, false);
ctx.closePath();
}
function _one_diamond(ctx, r) {
ctx.moveTo(0, r);
ctx.lineTo(r / 1.5, 0);
ctx.lineTo(0, -r);
ctx.lineTo(-r / 1.5, 0);
ctx.closePath();
}
function _one_hex(ctx, r) {
const r2 = r / 2;
const h = SQ3 * r2;
ctx.moveTo(r, 0);
ctx.lineTo(r2, -h);
ctx.lineTo(-r2, -h);
ctx.lineTo(-r, 0);
ctx.lineTo(-r2, h);
ctx.lineTo(r2, h);
ctx.closePath();
}
function _one_star(ctx, r) {
const a = Math.sqrt(5 - 2 * SQ5) * r;
ctx.moveTo(0, -r);
ctx.lineTo(a * c72, -r + a * s72);
ctx.lineTo(a * (1 + c72), -r + a * s72);
ctx.lineTo(a * (1 + c72 - c36), -r + a * (s72 + s36));
ctx.lineTo(a * (1 + 2 * c72 - c36), -r + a * (2 * s72 + s36));
ctx.lineTo(0, -r + a * 2 * s72);
ctx.lineTo(-a * (1 + 2 * c72 - c36), -r + a * (2 * s72 + s36));
ctx.lineTo(-a * (1 + c72 - c36), -r + a * (s72 + s36));
ctx.lineTo(-a * (1 + c72), -r + a * s72);
ctx.lineTo(-a * c72, -r + a * s72);
ctx.closePath();
}
function _one_tri(ctx, r) {
const h = r * SQ3;
const a = h / 3;
ctx.moveTo(-r, a);
ctx.lineTo(r, a);
ctx.lineTo(0, a - h);
ctx.closePath();
}
function asterisk(ctx, i, r, visuals) {
_one_cross(ctx, r);
_one_x(ctx, r);
visuals.line.apply(ctx, i);
}
function circle(ctx, i, r, visuals) {
ctx.arc(0, 0, r, 0, 2 * Math.PI, false);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function circle_cross(ctx, i, r, visuals) {
ctx.arc(0, 0, r, 0, 2 * Math.PI, false);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
_one_cross(ctx, r);
visuals.line.apply(ctx, i);
}
function circle_dot(ctx, i, r, visuals) {
circle(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function circle_y(ctx, i, r, visuals) {
ctx.arc(0, 0, r, 0, 2 * Math.PI, false);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
_one_y(ctx, r);
visuals.line.apply(ctx, i);
}
function circle_x(ctx, i, r, visuals) {
ctx.arc(0, 0, r, 0, 2 * Math.PI, false);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
_one_x(ctx, r);
visuals.line.apply(ctx, i);
}
function cross(ctx, i, r, visuals) {
_one_cross(ctx, r);
visuals.line.apply(ctx, i);
}
function diamond(ctx, i, r, visuals) {
_one_diamond(ctx, r);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function diamond_cross(ctx, i, r, visuals) {
_one_diamond(ctx, r);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
ctx.moveTo(0, r);
ctx.lineTo(0, -r);
ctx.moveTo(-r / 1.5, 0);
ctx.lineTo(r / 1.5, 0);
visuals.line.apply(ctx, i);
}
function diamond_dot(ctx, i, r, visuals) {
diamond(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function dot(ctx, i, r, visuals) {
_one_dot(ctx, r);
visuals.line.set_vectorize(ctx, i);
ctx.fillStyle = ctx.strokeStyle; // NOTE: dots use line color for fill to match
ctx.fill();
}
function hex(ctx, i, r, visuals) {
_one_hex(ctx, r);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function hex_dot(ctx, i, r, visuals) {
hex(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function inverted_triangle(ctx, i, r, visuals) {
ctx.rotate(Math.PI);
_one_tri(ctx, r);
ctx.rotate(-Math.PI);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function plus(ctx, i, r, visuals) {
const a = 3 * r / 8;
const b = r;
const xs = [a, a, b, b, a, a, -a, -a, -b, -b, -a, -a];
const ys = [b, a, a, -a, -a, -b, -b, -a, -a, a, a, b];
ctx.beginPath();
for (let j = 0; j < 12; j++) {
ctx.lineTo(xs[j], ys[j]);
}
ctx.closePath();
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function square(ctx, i, r, visuals) {
const size = 2 * r;
ctx.rect(-r, -r, size, size);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function square_pin(ctx, i, r, visuals) {
const a = 3 * r / 8;
ctx.moveTo(-r, -r);
/* eslint-disable space-in-parens */
ctx.quadraticCurveTo(0, -a, r, -r);
ctx.quadraticCurveTo(a, 0, r, r);
ctx.quadraticCurveTo(0, a, -r, r);
ctx.quadraticCurveTo(-a, 0, -r, -r);
/* eslint-enable space-in-parens */
ctx.closePath();
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function square_cross(ctx, i, r, visuals) {
const size = 2 * r;
ctx.rect(-r, -r, size, size);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
_one_cross(ctx, r);
visuals.line.apply(ctx, i);
}
function square_dot(ctx, i, r, visuals) {
square(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function square_x(ctx, i, r, visuals) {
const size = 2 * r;
ctx.rect(-r, -r, size, size);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
ctx.moveTo(-r, r);
ctx.lineTo(r, -r);
ctx.moveTo(-r, -r);
ctx.lineTo(r, r);
visuals.line.apply(ctx, i);
}
function star(ctx, i, r, visuals) {
_one_star(ctx, r);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function star_dot(ctx, i, r, visuals) {
star(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function triangle(ctx, i, r, visuals) {
_one_tri(ctx, r);
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function triangle_dot(ctx, i, r, visuals) {
triangle(ctx, i, r, visuals);
dot(ctx, i, r, visuals);
}
function triangle_pin(ctx, i, r, visuals) {
const h = r * SQ3;
const a = h / 3;
const b = 3 * a / 8;
ctx.moveTo(-r, a);
ctx.quadraticCurveTo(0, b, r, a);
ctx.quadraticCurveTo(SQ3 * b / 2, b / 2, 0, a - h);
ctx.quadraticCurveTo(-SQ3 * b / 2, b / 2, -r, a);
ctx.closePath();
visuals.fill.apply(ctx, i);
visuals.hatch.apply(ctx, i);
visuals.line.apply(ctx, i);
}
function dash(ctx, i, r, visuals) {
_one_line(ctx, r);
visuals.line.apply(ctx, i);
}
function x(ctx, i, r, visuals) {
_one_x(ctx, r);
visuals.line.apply(ctx, i);
}
function y(ctx, i, r, visuals) {
_one_y(ctx, r);
visuals.line.apply(ctx, i);
}
export const marker_funcs = {
asterisk,
circle,
circle_cross,
circle_dot,
circle_y,
circle_x,
cross,
diamond,
diamond_dot,
diamond_cross,
dot,
hex,
hex_dot,
inverted_triangle,
plus,
square,
square_cross,
square_dot,
square_pin,
square_x,
star,
star_dot,
triangle,
triangle_dot,
triangle_pin,
dash,
x,
y,
};
//# sourceMappingURL=defs.js.map