UNPKG

@visactor/vchart

Version:

charts lib based @visactor/VGrammar

78 lines (74 loc) 4.63 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: !0 }), exports.getPolarDimensionInfo = void 0; const vscale_1 = require("@visactor/vscale"), common_1 = require("./common"), vutils_1 = require("@visactor/vutils"), math_1 = require("../../../../util/math"), angleStandardize = (angle, range) => { const unit = 2 * Math.PI, min = (0, vutils_1.minInArray)(range), max = (0, vutils_1.maxInArray)(range); return angle < min ? angle += Math.ceil((min - angle) / unit) * unit : angle > max && (angle -= Math.ceil((angle - max) / unit) * unit), angle; }, getPolarDimensionInfo = (chart, pos) => { if (!chart) return null; const angleAxisList = (0, common_1.getAxis)(chart, (cmp => "angle" === cmp.getOrient()), pos), radiusAxisList = (0, common_1.getAxis)(chart, (cmp => "radius" === cmp.getOrient()), pos); if (!(angleAxisList && angleAxisList.length || radiusAxisList && radiusAxisList.length)) return null; const targetAxisInfo = [], getDimensionField = series => series.getDimensionField()[0], {x: x, y: y} = pos; return angleAxisList && angleAxisList.forEach((axis => { var _a; const angleScale = axis.getScale(); if (angleScale && (0, vscale_1.isDiscrete)(angleScale.type)) { const angleDomain = angleScale.domain(), angleRange = angleScale.range(), center = axis.getCenter(), vector = { x: x - axis.getLayoutStartPoint().x - center.x, y: y - axis.getLayoutStartPoint().y - center.y }; let angle = (0, math_1.vectorAngle)({ x: 1, y: 0 }, vector); angle = angleStandardize(angle, angleRange); const radius = (0, math_1.distance)(vector), radiusScale = null === (_a = radiusAxisList[0]) || void 0 === _a ? void 0 : _a.getScale(), radiusRange = null == radiusScale ? void 0 : radiusScale.range(); if ((angle - (null == angleRange ? void 0 : angleRange[0])) * (angle - (null == angleRange ? void 0 : angleRange[1])) > 0 || (radius - (null == radiusRange ? void 0 : radiusRange[0])) * (radius - (null == radiusRange ? void 0 : radiusRange[1])) > 0) return; const value = axis.invert(angle); if ((0, vutils_1.isNil)(value)) return; let index = angleDomain.findIndex((v => (null == v ? void 0 : v.toString()) === value.toString())); index < 0 && (index = void 0); const data = (0, common_1.getDimensionData)(value, axis, "polar", getDimensionField); targetAxisInfo.push({ index: index, value: value, position: angleScale.scale(value), axis: axis, data: data }); } })), radiusAxisList && radiusAxisList.forEach((axis => { var _a; const radiusScale = axis.getScale(), radiusRange = null == radiusScale ? void 0 : radiusScale.range(); if (radiusScale && (0, vscale_1.isDiscrete)(radiusScale.type)) { const center = axis.getCenter(), vector = { x: x - axis.getLayoutStartPoint().x - center.x, y: y - axis.getLayoutStartPoint().y - center.y }; let angle = (0, math_1.vectorAngle)({ x: 1, y: 0 }, vector); angle < -Math.PI / 2 && (angle = 2 * Math.PI + angle); const radius = (0, math_1.distance)(vector), angleScale = null === (_a = angleAxisList[0]) || void 0 === _a ? void 0 : _a.getScale(), angleRange = null == angleScale ? void 0 : angleScale.range(); if ((angle - (null == angleRange ? void 0 : angleRange[0])) * (angle - (null == angleRange ? void 0 : angleRange[1])) > 0 || (radius - (null == radiusRange ? void 0 : radiusRange[0])) * (radius - (null == radiusRange ? void 0 : radiusRange[1])) > 0) return; const value = radiusScale.invert(radius); if ((0, vutils_1.isNil)(value)) return; let index = radiusScale.domain().findIndex((v => (null == v ? void 0 : v.toString()) === value.toString())); index < 0 && (index = void 0); const data = (0, common_1.getDimensionData)(value, axis, "polar", getDimensionField); targetAxisInfo.push({ index: index, value: value, position: radiusScale.scale(value), axis: axis, data: data }); } })), targetAxisInfo.length ? targetAxisInfo : null; }; exports.getPolarDimensionInfo = getPolarDimensionInfo; //# sourceMappingURL=polar.js.map