mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-21 04:58:12 +08:00
98 lines
2.0 KiB
JavaScript
98 lines
2.0 KiB
JavaScript
// jshint esversion: 6
|
|
import _ from "lodash";
|
|
import { project } from "./util";
|
|
|
|
import renderQueue from "../../util/renderQueue";
|
|
|
|
/*****************************************
|
|
******************************************
|
|
draw loop
|
|
******************************************
|
|
******************************************/
|
|
|
|
const drawLinesCanvas = (
|
|
ctx,
|
|
dimensions,
|
|
xscale,
|
|
colorAccessor,
|
|
colorScale
|
|
) => {
|
|
return d => {
|
|
ctx.globalAlpha = 0.1;
|
|
|
|
if (d["__selected__"]) {
|
|
ctx.strokeStyle = d["__color__"];
|
|
} else {
|
|
return;
|
|
}
|
|
|
|
ctx.beginPath();
|
|
var coords = project(d, dimensions, xscale);
|
|
coords.forEach((p, i) => {
|
|
// this tricky bit avoids rendering null values as 0
|
|
if (p === null) {
|
|
// this bit renders horizontal lines on the previous/next
|
|
// dimensions, so that sandwiched null values are visible
|
|
if (i > 0) {
|
|
var prev = coords[i - 1];
|
|
if (prev !== null) {
|
|
ctx.moveTo(prev[0], prev[1]);
|
|
ctx.lineTo(prev[0] + 6, prev[1]);
|
|
}
|
|
}
|
|
if (i < coords.length - 1) {
|
|
var next = coords[i + 1];
|
|
if (next !== null) {
|
|
ctx.moveTo(next[0] - 6, next[1]);
|
|
}
|
|
}
|
|
return;
|
|
}
|
|
|
|
if (i == 0) {
|
|
ctx.moveTo(p[0], p[1]);
|
|
return;
|
|
}
|
|
|
|
ctx.lineTo(p[0], p[1]);
|
|
});
|
|
ctx.stroke();
|
|
};
|
|
};
|
|
|
|
const drawCellLinesUsingRenderQueue = (
|
|
metadata,
|
|
dimensions,
|
|
xscale,
|
|
ctx,
|
|
colorAccessor,
|
|
colorScale
|
|
) => {
|
|
const _renderLinesWithQueue = renderQueue(
|
|
drawLinesCanvas(ctx, dimensions, xscale, colorAccessor, colorScale)
|
|
).rate(50);
|
|
_renderLinesWithQueue(metadata);
|
|
return _renderLinesWithQueue;
|
|
};
|
|
|
|
const drawCellLinesSync = (
|
|
metadata,
|
|
dimensions,
|
|
xscale,
|
|
ctx,
|
|
colorAccessor,
|
|
colorScale
|
|
) => {
|
|
const _draw = drawLinesCanvas(
|
|
ctx,
|
|
dimensions,
|
|
xscale,
|
|
colorAccessor,
|
|
colorScale
|
|
);
|
|
_.each(metadata, _draw);
|
|
};
|
|
|
|
export default drawCellLinesUsingRenderQueue;
|
|
// export default drawCellLinesUsingRenderQueue;
|