UNPKG

@visactor/vgrammar-core

Version:

VGrammar is a visual grammar library

54 lines (46 loc) 2.83 kB
"use strict"; 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