@visactor/vgrammar-venn
Version:
Venn layout transform for VGrammar
51 lines (46 loc) • 2.24 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.transformMark = exports.transform = void 0;
const utils_1 = require("./utils"), path_1 = require("./utils/path"), vutils_1 = require("@visactor/vutils"), transform = (options, upstreamData) => {
const {x0: x0, x1: x1, y0: y0, y1: y1, setField: setField = "sets", valueField: valueField = "size", orientation: orientation = Math.PI / 2, orientationOrder: orientationOrder = null} = options;
let circles = {}, textCenters = {};
if (upstreamData.length > 0) {
const vennData = upstreamData.map((area => ({
sets: (0, vutils_1.array)(area[setField]),
size: area[valueField]
})));
let solution = (0, utils_1.venn)(vennData, options);
solution = (0, utils_1.normalizeSolution)(solution, orientation, orientationOrder),
circles = (0, utils_1.scaleSolution)(solution, x1 - x0, y1 - y0, x0, y0), textCenters = (0,
utils_1.computeTextCenters)(circles, vennData);
}
return upstreamData.map((area => {
const sets = (0, vutils_1.array)(area[setField]), key = sets.toString(), textCenter = textCenters[key], basicDatum = Object.assign(Object.assign({}, area), {
datum: area,
sets: sets,
key: key,
size: area[valueField],
labelX: null == textCenter ? void 0 : textCenter.x,
labelY: null == textCenter ? void 0 : textCenter.y
}), circle = circles[key];
if (circle) return Object.assign(Object.assign({}, basicDatum), {
type: "circle",
x: circle.x,
y: circle.y,
radius: circle.radius
});
const arcs = (0, path_1.getArcsFromCircles)(sets.map((name => circles[name])));
return Object.assign(Object.assign({}, basicDatum), {
type: "overlap",
x: 0,
y: 0,
path: (0, path_1.getPathFromArcs)(arcs),
arcs: arcs
});
}));
};
exports.transform = transform;
const transformMark = (options, upstreamData) => upstreamData.filter((datum => datum.type === options.datumType));
exports.transformMark = transformMark;
//# sourceMappingURL=venn.js.map