@visactor/vgrammar-core
Version:
VGrammar is a visual grammar library
54 lines (46 loc) • 2.83 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: !0
}), exports.transform = exports.jitterX = exports.jitterY = void 0;
const vutils_1 = require("@visactor/vutils"), vgrammar_util_1 = require("@visactor/vgrammar-util"), scale_1 = require("../../util/scale"), jitterByChannel = (options, upstreamData, channel) => {
var _a, _b, _c, _d;
const mark = upstreamData[0].mark, scale = null === (_a = mark.getScalesByChannel()) || void 0 === _a ? void 0 : _a[channel], random = null !== (_b = options.random) && void 0 !== _b ? _b : Math.random, ratio = Math.min(null !== (_c = "x" === channel ? options.widthRatio : options.heightRatio) && void 0 !== _c ? _c : .4, .5), bandSize = null !== (_d = "x" === channel ? options.bandWidth : options.bandHeight) && void 0 !== _d ? _d : (0,
scale_1.getBandWidthOfScale)(scale);
if ((0, vutils_1.isNil)(bandSize)) {
let domain = (0, vgrammar_util_1.extent)(upstreamData, (el => el.getItemAttribute(channel)));
if ((0, vutils_1.isNil)(domain[0]) || (0, vutils_1.isNil)(domain[1]) || domain[0] === domain[1]) {
const viewBox = mark.view.getViewBox();
domain = "x" === channel ? [ viewBox.x1, viewBox.x2 ] : [ viewBox.y1, viewBox.y2 ];
}
const length = upstreamData.length;
upstreamData.forEach(((element, index) => {
element.setItemAttributes({
[channel]: domain[0] + (domain[1] - domain[0]) * random(index, length)
});
}));
} else {
const length = upstreamData.length;
upstreamData.forEach(((element, index) => {
const val = element.getItemAttribute(channel), domain = [ val - ratio * bandSize, val + ratio * bandSize ];
element.setItemAttributes({
[channel]: domain[0] + (domain[1] - domain[0]) * random(index, length)
});
}));
}
}, jitterY = (options, upstreamData) => {
var _a;
return upstreamData && 0 !== upstreamData.length && (null === (_a = upstreamData[0]) || void 0 === _a ? void 0 : _a.mark) ? jitterByChannel(options, upstreamData, "y") : upstreamData;
};
exports.jitterY = jitterY;
const jitterX = (options, upstreamData) => {
var _a;
return upstreamData && 0 !== upstreamData.length && (null === (_a = upstreamData[0]) || void 0 === _a ? void 0 : _a.mark) ? jitterByChannel(options, upstreamData, "x") : upstreamData;
};
exports.jitterX = jitterX;
const transform = (options, upstreamData) => {
var _a;
return upstreamData && 0 !== upstreamData.length && (null === (_a = upstreamData[0]) || void 0 === _a ? void 0 : _a.mark) ? (jitterByChannel(options, upstreamData, "x"),
jitterByChannel(options, upstreamData, "y"), upstreamData) : upstreamData;
};
exports.transform = transform;
//# sourceMappingURL=jitter.js.map