"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.radarAxis = radarAxis; var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray")); var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty")); var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray")); var _updater = require("../class/updater.class"); var _index = require("../config/index"); var _util = require("@jiaminghi/c-render/lib/plugin/util"); var _util2 = require("../util"); function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; } function radarAxis(chart) { var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var radar = option.radar; var radarAxis = []; if (radar) { radarAxis = mergeRadarAxisDefaultConfig(radar); radarAxis = calcRadarAxisCenter(radarAxis, chart); radarAxis = calcRadarAxisRingRadius(radarAxis, chart); radarAxis = calcRadarAxisLinePosition(radarAxis); radarAxis = calcRadarAxisAreaRadius(radarAxis); radarAxis = calcRadarAxisLabelPosition(radarAxis); radarAxis = [radarAxis]; } var radarAxisForUpdate = radarAxis; if (radarAxis.length && !radarAxis[0].show) radarAxisForUpdate = []; (0, _updater.doUpdate)({ chart: chart, series: radarAxisForUpdate, key: 'radarAxisSplitArea', getGraphConfig: getSplitAreaConfig, beforeUpdate: beforeUpdateSplitArea, beforeChange: beforeChangeSplitArea }); (0, _updater.doUpdate)({ chart: chart, series: radarAxisForUpdate, key: 'radarAxisSplitLine', getGraphConfig: getSplitLineConfig, beforeUpdate: beforeUpdateSplitLine, beforeChange: beforeChangeSplitLine }); (0, _updater.doUpdate)({ chart: chart, series: radarAxisForUpdate, key: 'radarAxisLine', getGraphConfig: getAxisLineConfig }); (0, _updater.doUpdate)({ chart: chart, series: radarAxisForUpdate, key: 'radarAxisLable', getGraphConfig: getAxisLabelConfig }); chart.radarAxis = radarAxis[0]; } function mergeRadarAxisDefaultConfig(radar) { return (0, _util2.deepMerge)((0, _util.deepClone)(_index.radarAxisConfig), radar); } function calcRadarAxisCenter(radarAxis, chart) { var area = chart.render.area; var center = radarAxis.center; radarAxis.centerPos = center.map(function (v, i) { if (typeof v === 'number') return v; return parseInt(v) / 100 * area[i]; }); return radarAxis; } function calcRadarAxisRingRadius(radarAxis, chart) { var area = chart.render.area; var splitNum = radarAxis.splitNum, radius = radarAxis.radius; var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2["default"])(area)) / 2; if (typeof radius !== 'number') radius = parseInt(radius) / 100 * maxRadius; var splitGap = radius / splitNum; radarAxis.ringRadius = new Array(splitNum).fill(0).map(function (foo, i) { return splitGap * (i + 1); }); radarAxis.radius = radius; return radarAxis; } function calcRadarAxisLinePosition(radarAxis) { var indicator = radarAxis.indicator, centerPos = radarAxis.centerPos, radius = radarAxis.radius, startAngle = radarAxis.startAngle; var fullAngle = Math.PI * 2; var indicatorNum = indicator.length; var indicatorGap = fullAngle / indicatorNum; var angles = new Array(indicatorNum).fill(0).map(function (foo, i) { return indicatorGap * i + startAngle; }); radarAxis.axisLineAngles = angles; radarAxis.axisLinePosition = angles.map(function (g) { return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, g])); }); return radarAxis; } function calcRadarAxisAreaRadius(radarAxis) { var ringRadius = radarAxis.ringRadius; var subRadius = ringRadius[0] / 2; radarAxis.areaRadius = ringRadius.map(function (r) { return r - subRadius; }); return radarAxis; } function calcRadarAxisLabelPosition(radarAxis) { var axisLineAngles = radarAxis.axisLineAngles, centerPos = radarAxis.centerPos, radius = radarAxis.radius, axisLabel = radarAxis.axisLabel; radius += axisLabel.labelGap; radarAxis.axisLabelPosition = axisLineAngles.map(function (angle) { return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, angle])); }); return radarAxis; } function getSplitAreaConfig(radarAxis) { var areaRadius = radarAxis.areaRadius, polygon = radarAxis.polygon, animationCurve = radarAxis.animationCurve, animationFrame = radarAxis.animationFrame, rLevel = radarAxis.rLevel; var name = polygon ? 'regPolygon' : 'ring'; return areaRadius.map(function (foo, i) { return { name: name, index: rLevel, visible: radarAxis.splitArea.show, animationCurve: animationCurve, animationFrame: animationFrame, shape: getSplitAreaShape(radarAxis, i), style: getSplitAreaStyle(radarAxis, i) }; }); } function getSplitAreaShape(radarAxis, i) { var polygon = radarAxis.polygon, areaRadius = radarAxis.areaRadius, indicator = radarAxis.indicator, centerPos = radarAxis.centerPos; var indicatorNum = indicator.length; var shape = { rx: centerPos[0], ry: centerPos[1], r: areaRadius[i] }; if (polygon) shape.side = indicatorNum; return shape; } function getSplitAreaStyle(radarAxis, i) { var splitArea = radarAxis.splitArea, ringRadius = radarAxis.ringRadius, axisLineAngles = radarAxis.axisLineAngles, polygon = radarAxis.polygon, centerPos = radarAxis.centerPos; var color = splitArea.color, style = splitArea.style; style = _objectSpread({ fill: 'rgba(0, 0, 0, 0)' }, style); var lineWidth = ringRadius[0] - 0; if (polygon) { var point1 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[0]])); var point2 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[1]])); lineWidth = (0, _util2.getPointToLineDistance)(centerPos, point1, point2); } style = (0, _util2.deepMerge)((0, _util.deepClone)(style, true), { lineWidth: lineWidth }); if (!color.length) return style; var colorNum = color.length; return (0, _util2.deepMerge)(style, { stroke: color[i % colorNum] }); } function beforeUpdateSplitArea(graphs, radarAxis, i, updater) { var cache = graphs[i]; if (!cache) return; var render = updater.chart.render; var polygon = radarAxis.polygon; var name = cache[0].name; var currentName = polygon ? 'regPolygon' : 'ring'; var delAll = currentName !== name; if (!delAll) return; cache.forEach(function (g) { return render.delGraph(g); }); graphs[i] = null; } function beforeChangeSplitArea(graph, config) { var side = config.shape.side; if (typeof side !== 'number') return; graph.shape.side = side; } function getSplitLineConfig(radarAxis) { var ringRadius = radarAxis.ringRadius, polygon = radarAxis.polygon, animationCurve = radarAxis.animationCurve, animationFrame = radarAxis.animationFrame, rLevel = radarAxis.rLevel; var name = polygon ? 'regPolygon' : 'ring'; return ringRadius.map(function (foo, i) { return { name: name, index: rLevel, animationCurve: animationCurve, animationFrame: animationFrame, visible: radarAxis.splitLine.show, shape: getSplitLineShape(radarAxis, i), style: getSplitLineStyle(radarAxis, i) }; }); } function getSplitLineShape(radarAxis, i) { var ringRadius = radarAxis.ringRadius, centerPos = radarAxis.centerPos, indicator = radarAxis.indicator, polygon = radarAxis.polygon; var shape = { rx: centerPos[0], ry: centerPos[1], r: ringRadius[i] }; var indicatorNum = indicator.length; if (polygon) shape.side = indicatorNum; return shape; } function getSplitLineStyle(radarAxis, i) { var splitLine = radarAxis.splitLine; var color = splitLine.color, style = splitLine.style; style = _objectSpread({ fill: 'rgba(0, 0, 0, 0)' }, style); if (!color.length) return style; var colorNum = color.length; return (0, _util2.deepMerge)(style, { stroke: color[i % colorNum] }); } function beforeUpdateSplitLine(graphs, radarAxis, i, updater) { var cache = graphs[i]; if (!cache) return; var render = updater.chart.render; var polygon = radarAxis.polygon; var name = cache[0].name; var currenName = polygon ? 'regPolygon' : 'ring'; var delAll = currenName !== name; if (!delAll) return; cache.forEach(function (g) { return render.delGraph(g); }); graphs[i] = null; } function beforeChangeSplitLine(graph, config) { var side = config.shape.side; if (typeof side !== 'number') return; graph.shape.side = side; } function getAxisLineConfig(radarAxis) { var axisLinePosition = radarAxis.axisLinePosition, animationCurve = radarAxis.animationCurve, animationFrame = radarAxis.animationFrame, rLevel = radarAxis.rLevel; return axisLinePosition.map(function (foo, i) { return { name: 'polyline', index: rLevel, visible: radarAxis.axisLine.show, animationCurve: animationCurve, animationFrame: animationFrame, shape: getAxisLineShape(radarAxis, i), style: getAxisLineStyle(radarAxis, i) }; }); } function getAxisLineShape(radarAxis, i) { var centerPos = radarAxis.centerPos, axisLinePosition = radarAxis.axisLinePosition; var points = [centerPos, axisLinePosition[i]]; return { points: points }; } function getAxisLineStyle(radarAxis, i) { var axisLine = radarAxis.axisLine; var color = axisLine.color, style = axisLine.style; if (!color.length) return style; var colorNum = color.length; return (0, _util2.deepMerge)(style, { stroke: color[i % colorNum] }); } function getAxisLabelConfig(radarAxis) { var axisLabelPosition = radarAxis.axisLabelPosition, animationCurve = radarAxis.animationCurve, animationFrame = radarAxis.animationFrame, rLevel = radarAxis.rLevel; return axisLabelPosition.map(function (foo, i) { return { name: 'text', index: rLevel, visible: radarAxis.axisLabel.show, animationCurve: animationCurve, animationFrame: animationFrame, shape: getAxisLableShape(radarAxis, i), style: getAxisLableStyle(radarAxis, i) }; }); } function getAxisLableShape(radarAxis, i) { var axisLabelPosition = radarAxis.axisLabelPosition, indicator = radarAxis.indicator; return { content: indicator[i].name, position: axisLabelPosition[i] }; } function getAxisLableStyle(radarAxis, i) { var axisLabel = radarAxis.axisLabel, _radarAxis$centerPos = (0, _slicedToArray2["default"])(radarAxis.centerPos, 2), x = _radarAxis$centerPos[0], y = _radarAxis$centerPos[1], axisLabelPosition = radarAxis.axisLabelPosition; var color = axisLabel.color, style = axisLabel.style; var _axisLabelPosition$i = (0, _slicedToArray2["default"])(axisLabelPosition[i], 2), labelXpos = _axisLabelPosition$i[0], labelYPos = _axisLabelPosition$i[1]; var textAlign = labelXpos > x ? 'left' : 'right'; var textBaseline = labelYPos > y ? 'top' : 'bottom'; style = (0, _util2.deepMerge)({ textAlign: textAlign, textBaseline: textBaseline }, style); if (!color.length) return style; var colorNum = color.length; return (0, _util2.deepMerge)(style, { fill: color[i % colorNum] }); }