| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.pie = pie;
- var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
- var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
- var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
- var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
- var _updater = require("../class/updater.class");
- var _pie = require("../config/pie");
- 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 pie(chart) {
- var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
- var series = option.series;
- if (!series) series = [];
- var pies = (0, _util2.initNeedSeries)(series, _pie.pieConfig, 'pie');
- pies = calcPiesCenter(pies, chart);
- pies = calcPiesRadius(pies, chart);
- pies = calcRosePiesRadius(pies, chart);
- pies = calcPiesPercent(pies);
- pies = calcPiesAngle(pies, chart);
- pies = calcPiesInsideLabelPos(pies);
- pies = calcPiesEdgeCenterPos(pies);
- pies = calcPiesOutSideLabelPos(pies);
- (0, _updater.doUpdate)({
- chart: chart,
- series: pies,
- key: 'pie',
- getGraphConfig: getPieConfig,
- getStartGraphConfig: getStartPieConfig,
- beforeChange: beforeChangePie
- });
- (0, _updater.doUpdate)({
- chart: chart,
- series: pies,
- key: 'pieInsideLabel',
- getGraphConfig: getInsideLabelConfig
- });
- (0, _updater.doUpdate)({
- chart: chart,
- series: pies,
- key: 'pieOutsideLabelLine',
- getGraphConfig: getOutsideLabelLineConfig,
- getStartGraphConfig: getStartOutsideLabelLineConfig
- });
- (0, _updater.doUpdate)({
- chart: chart,
- series: pies,
- key: 'pieOutsideLabel',
- getGraphConfig: getOutsideLabelConfig,
- getStartGraphConfig: getStartOutsideLabelConfig
- });
- }
- function calcPiesCenter(pies, chart) {
- var area = chart.render.area;
- pies.forEach(function (pie) {
- var center = pie.center;
- center = center.map(function (pos, i) {
- if (typeof pos === 'number') return pos;
- return parseInt(pos) / 100 * area[i];
- });
- pie.center = center;
- });
- return pies;
- }
- function calcPiesRadius(pies, chart) {
- var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2["default"])(chart.render.area)) / 2;
- pies.forEach(function (pie) {
- var radius = pie.radius,
- data = pie.data;
- radius = getNumberRadius(radius, maxRadius);
- data.forEach(function (item) {
- var itemRadius = item.radius;
- if (!itemRadius) itemRadius = radius;
- itemRadius = getNumberRadius(itemRadius, maxRadius);
- item.radius = itemRadius;
- });
- pie.radius = radius;
- });
- return pies;
- }
- function getNumberRadius(radius, maxRadius) {
- if (!(radius instanceof Array)) radius = [0, radius];
- radius = radius.map(function (r) {
- if (typeof r === 'number') return r;
- return parseInt(r) / 100 * maxRadius;
- });
- return radius;
- }
- function calcRosePiesRadius(pies, chart) {
- var rosePie = pies.filter(function (_ref) {
- var roseType = _ref.roseType;
- return roseType;
- });
- rosePie.forEach(function (pie) {
- var radius = pie.radius,
- data = pie.data,
- roseSort = pie.roseSort;
- var roseIncrement = getRoseIncrement(pie);
- var dataCopy = (0, _toConsumableArray2["default"])(data);
- data = sortData(data);
- data.forEach(function (item, i) {
- item.radius[1] = radius[1] - roseIncrement * i;
- });
- if (roseSort) {
- data.reverse();
- } else {
- pie.data = dataCopy;
- }
- pie.roseIncrement = roseIncrement;
- });
- return pies;
- }
- function sortData(data) {
- return data.sort(function (_ref2, _ref3) {
- var a = _ref2.value;
- var b = _ref3.value;
- if (a === b) return 0;
- if (a > b) return -1;
- if (a < b) return 1;
- });
- }
- function getRoseIncrement(pie) {
- var radius = pie.radius,
- roseIncrement = pie.roseIncrement;
- if (typeof roseIncrement === 'number') return roseIncrement;
- if (roseIncrement === 'auto') {
- var data = pie.data;
- var allRadius = data.reduce(function (all, _ref4) {
- var radius = _ref4.radius;
- return [].concat((0, _toConsumableArray2["default"])(all), (0, _toConsumableArray2["default"])(radius));
- }, []);
- var minRadius = Math.min.apply(Math, (0, _toConsumableArray2["default"])(allRadius));
- var maxRadius = Math.max.apply(Math, (0, _toConsumableArray2["default"])(allRadius));
- return (maxRadius - minRadius) * 0.6 / (data.length - 1 || 1);
- }
- return parseInt(roseIncrement) / 100 * radius[1];
- }
- function calcPiesPercent(pies) {
- pies.forEach(function (pie) {
- var data = pie.data,
- percentToFixed = pie.percentToFixed;
- var sum = getDataSum(data);
- data.forEach(function (item) {
- var value = item.value;
- item.percent = value / sum * 100;
- item.percentForLabel = toFixedNoCeil(value / sum * 100, percentToFixed);
- });
- var percentSumNoLast = (0, _util2.mulAdd)(data.slice(0, -1).map(function (_ref5) {
- var percent = _ref5.percent;
- return percent;
- }));
- data.slice(-1)[0].percent = 100 - percentSumNoLast;
- data.slice(-1)[0].percentForLabel = toFixedNoCeil(100 - percentSumNoLast, percentToFixed);
- });
- return pies;
- }
- function toFixedNoCeil(number) {
- var toFixed = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var stringNumber = number.toString();
- var splitedNumber = stringNumber.split('.');
- var decimal = splitedNumber[1] || '0';
- var fixedDecimal = decimal.slice(0, toFixed);
- splitedNumber[1] = fixedDecimal;
- return parseFloat(splitedNumber.join('.'));
- }
- function getDataSum(data) {
- return (0, _util2.mulAdd)(data.map(function (_ref6) {
- var value = _ref6.value;
- return value;
- }));
- }
- function calcPiesAngle(pies) {
- pies.forEach(function (pie) {
- var start = pie.startAngle,
- data = pie.data;
- data.forEach(function (item, i) {
- var _getDataAngle = getDataAngle(data, i),
- _getDataAngle2 = (0, _slicedToArray2["default"])(_getDataAngle, 2),
- startAngle = _getDataAngle2[0],
- endAngle = _getDataAngle2[1];
- item.startAngle = start + startAngle;
- item.endAngle = start + endAngle;
- });
- });
- return pies;
- }
- function getDataAngle(data, i) {
- var fullAngle = Math.PI * 2;
- var needAddData = data.slice(0, i + 1);
- var percentSum = (0, _util2.mulAdd)(needAddData.map(function (_ref7) {
- var percent = _ref7.percent;
- return percent;
- }));
- var percent = data[i].percent;
- var startPercent = percentSum - percent;
- return [fullAngle * startPercent / 100, fullAngle * percentSum / 100];
- }
- function calcPiesInsideLabelPos(pies) {
- pies.forEach(function (pieItem) {
- var data = pieItem.data;
- data.forEach(function (item) {
- item.insideLabelPos = getPieInsideLabelPos(pieItem, item);
- });
- });
- return pies;
- }
- function getPieInsideLabelPos(pieItem, dataItem) {
- var center = pieItem.center;
- var startAngle = dataItem.startAngle,
- endAngle = dataItem.endAngle,
- _dataItem$radius = (0, _slicedToArray2["default"])(dataItem.radius, 2),
- ir = _dataItem$radius[0],
- or = _dataItem$radius[1];
- var radius = (ir + or) / 2;
- var angle = (startAngle + endAngle) / 2;
- return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(center).concat([radius, angle]));
- }
- function calcPiesEdgeCenterPos(pies) {
- pies.forEach(function (pie) {
- var data = pie.data,
- center = pie.center;
- data.forEach(function (item) {
- var startAngle = item.startAngle,
- endAngle = item.endAngle,
- radius = item.radius;
- var centerAngle = (startAngle + endAngle) / 2;
- var pos = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(center).concat([radius[1], centerAngle]));
- item.edgeCenterPos = pos;
- });
- });
- return pies;
- }
- function calcPiesOutSideLabelPos(pies) {
- pies.forEach(function (pieItem) {
- var leftPieDataItems = getLeftOrRightPieDataItems(pieItem);
- var rightPieDataItems = getLeftOrRightPieDataItems(pieItem, false);
- leftPieDataItems = sortPiesFromTopToBottom(leftPieDataItems);
- rightPieDataItems = sortPiesFromTopToBottom(rightPieDataItems);
- addLabelLineAndAlign(leftPieDataItems, pieItem);
- addLabelLineAndAlign(rightPieDataItems, pieItem, false);
- });
- return pies;
- }
- function getLabelLineBendRadius(pieItem) {
- var labelLineBendGap = pieItem.outsideLabel.labelLineBendGap;
- var maxRadius = getPieMaxRadius(pieItem);
- if (typeof labelLineBendGap !== 'number') {
- labelLineBendGap = parseInt(labelLineBendGap) / 100 * maxRadius;
- }
- return labelLineBendGap + maxRadius;
- }
- function getPieMaxRadius(pieItem) {
- var data = pieItem.data;
- var radius = data.map(function (_ref8) {
- var _ref8$radius = (0, _slicedToArray2["default"])(_ref8.radius, 2),
- foo = _ref8$radius[0],
- r = _ref8$radius[1];
- return r;
- });
- return Math.max.apply(Math, (0, _toConsumableArray2["default"])(radius));
- }
- function getLeftOrRightPieDataItems(pieItem) {
- var left = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
- var data = pieItem.data,
- center = pieItem.center;
- var centerXPos = center[0];
- return data.filter(function (_ref9) {
- var edgeCenterPos = _ref9.edgeCenterPos;
- var xPos = edgeCenterPos[0];
- if (left) return xPos <= centerXPos;
- return xPos > centerXPos;
- });
- }
- function sortPiesFromTopToBottom(dataItem) {
- dataItem.sort(function (_ref10, _ref11) {
- var _ref10$edgeCenterPos = (0, _slicedToArray2["default"])(_ref10.edgeCenterPos, 2),
- t = _ref10$edgeCenterPos[0],
- ay = _ref10$edgeCenterPos[1];
- var _ref11$edgeCenterPos = (0, _slicedToArray2["default"])(_ref11.edgeCenterPos, 2),
- tt = _ref11$edgeCenterPos[0],
- by = _ref11$edgeCenterPos[1];
- if (ay > by) return 1;
- if (ay < by) return -1;
- if (ay === by) return 0;
- });
- return dataItem;
- }
- function addLabelLineAndAlign(dataItem, pieItem) {
- var left = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
- var center = pieItem.center,
- outsideLabel = pieItem.outsideLabel;
- var radius = getLabelLineBendRadius(pieItem);
- dataItem.forEach(function (item) {
- var edgeCenterPos = item.edgeCenterPos,
- startAngle = item.startAngle,
- endAngle = item.endAngle;
- var labelLineEndLength = outsideLabel.labelLineEndLength;
- var angle = (startAngle + endAngle) / 2;
- var bendPoint = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(center).concat([radius, angle]));
- var endPoint = (0, _toConsumableArray2["default"])(bendPoint);
- endPoint[0] += labelLineEndLength * (left ? -1 : 1);
- item.labelLine = [edgeCenterPos, bendPoint, endPoint];
- item.labelLineLength = (0, _util2.getPolylineLength)(item.labelLine);
- item.align = {
- textAlign: 'left',
- textBaseline: 'middle'
- };
- if (left) item.align.textAlign = 'right';
- });
- }
- function getPieConfig(pieItem) {
- var data = pieItem.data,
- animationCurve = pieItem.animationCurve,
- animationFrame = pieItem.animationFrame,
- rLevel = pieItem.rLevel;
- return data.map(function (foo, i) {
- return {
- name: 'pie',
- index: rLevel,
- animationCurve: animationCurve,
- animationFrame: animationFrame,
- shape: getPieShape(pieItem, i),
- style: getPieStyle(pieItem, i)
- };
- });
- }
- function getStartPieConfig(pieItem) {
- var animationDelayGap = pieItem.animationDelayGap,
- startAnimationCurve = pieItem.startAnimationCurve;
- var configs = getPieConfig(pieItem);
- configs.forEach(function (config, i) {
- config.animationCurve = startAnimationCurve;
- config.animationDelay = i * animationDelayGap;
- config.shape.or = config.shape.ir;
- });
- return configs;
- }
- function beforeChangePie(graph) {
- graph.animationDelay = 0;
- }
- function getPieShape(pieItem, i) {
- var center = pieItem.center,
- data = pieItem.data;
- var dataItem = data[i];
- var radius = dataItem.radius,
- startAngle = dataItem.startAngle,
- endAngle = dataItem.endAngle;
- return {
- startAngle: startAngle,
- endAngle: endAngle,
- ir: radius[0],
- or: radius[1],
- rx: center[0],
- ry: center[1]
- };
- }
- function getPieStyle(pieItem, i) {
- var pieStyle = pieItem.pieStyle,
- data = pieItem.data;
- var dataItem = data[i];
- var color = dataItem.color;
- return (0, _util2.deepMerge)({
- fill: color
- }, pieStyle);
- }
- function getInsideLabelConfig(pieItem) {
- var animationCurve = pieItem.animationCurve,
- animationFrame = pieItem.animationFrame,
- data = pieItem.data,
- rLevel = pieItem.rLevel;
- return data.map(function (foo, i) {
- return {
- name: 'text',
- index: rLevel,
- visible: pieItem.insideLabel.show,
- animationCurve: animationCurve,
- animationFrame: animationFrame,
- shape: getInsideLabelShape(pieItem, i),
- style: getInsideLabelStyle(pieItem, i)
- };
- });
- }
- function getInsideLabelShape(pieItem, i) {
- var insideLabel = pieItem.insideLabel,
- data = pieItem.data;
- var formatter = insideLabel.formatter;
- var dataItem = data[i];
- var formatterType = (0, _typeof2["default"])(formatter);
- var label = '';
- if (formatterType === 'string') {
- label = formatter.replace('{name}', dataItem.name);
- label = label.replace('{percent}', dataItem.percentForLabel);
- label = label.replace('{value}', dataItem.value);
- }
- if (formatterType === 'function') {
- label = formatter(dataItem);
- }
- return {
- content: label,
- position: dataItem.insideLabelPos
- };
- }
- function getInsideLabelStyle(pieItem, i) {
- var style = pieItem.insideLabel.style;
- return style;
- }
- function getOutsideLabelLineConfig(pieItem) {
- var animationCurve = pieItem.animationCurve,
- animationFrame = pieItem.animationFrame,
- data = pieItem.data,
- rLevel = pieItem.rLevel;
- return data.map(function (foo, i) {
- return {
- name: 'polyline',
- index: rLevel,
- visible: pieItem.outsideLabel.show,
- animationCurve: animationCurve,
- animationFrame: animationFrame,
- shape: getOutsideLabelLineShape(pieItem, i),
- style: getOutsideLabelLineStyle(pieItem, i)
- };
- });
- }
- function getStartOutsideLabelLineConfig(pieItem) {
- var data = pieItem.data;
- var configs = getOutsideLabelLineConfig(pieItem);
- configs.forEach(function (config, i) {
- config.style.lineDash = [0, data[i].labelLineLength];
- });
- return configs;
- }
- function getOutsideLabelLineShape(pieItem, i) {
- var data = pieItem.data;
- var dataItem = data[i];
- return {
- points: dataItem.labelLine
- };
- }
- function getOutsideLabelLineStyle(pieItem, i) {
- var outsideLabel = pieItem.outsideLabel,
- data = pieItem.data;
- var labelLineStyle = outsideLabel.labelLineStyle;
- var color = data[i].color;
- return (0, _util2.deepMerge)({
- stroke: color,
- lineDash: [data[i].labelLineLength, 0]
- }, labelLineStyle);
- }
- function getOutsideLabelConfig(pieItem) {
- var animationCurve = pieItem.animationCurve,
- animationFrame = pieItem.animationFrame,
- data = pieItem.data,
- rLevel = pieItem.rLevel;
- return data.map(function (foo, i) {
- return {
- name: 'text',
- index: rLevel,
- visible: pieItem.outsideLabel.show,
- animationCurve: animationCurve,
- animationFrame: animationFrame,
- shape: getOutsideLabelShape(pieItem, i),
- style: getOutsideLabelStyle(pieItem, i)
- };
- });
- }
- function getStartOutsideLabelConfig(pieItem) {
- var data = pieItem.data;
- var configs = getOutsideLabelConfig(pieItem);
- configs.forEach(function (config, i) {
- config.shape.position = data[i].labelLine[1];
- });
- return configs;
- }
- function getOutsideLabelShape(pieItem, i) {
- var outsideLabel = pieItem.outsideLabel,
- data = pieItem.data;
- var formatter = outsideLabel.formatter;
- var _data$i = data[i],
- labelLine = _data$i.labelLine,
- name = _data$i.name,
- percentForLabel = _data$i.percentForLabel,
- value = _data$i.value;
- var formatterType = (0, _typeof2["default"])(formatter);
- var label = '';
- if (formatterType === 'string') {
- label = formatter.replace('{name}', name);
- label = label.replace('{percent}', percentForLabel);
- label = label.replace('{value}', value);
- }
- if (formatterType === 'function') {
- label = formatter(data[i]);
- }
- return {
- content: label,
- position: labelLine[2]
- };
- }
- function getOutsideLabelStyle(pieItem, i) {
- var outsideLabel = pieItem.outsideLabel,
- data = pieItem.data;
- var _data$i2 = data[i],
- color = _data$i2.color,
- align = _data$i2.align;
- var style = outsideLabel.style;
- return (0, _util2.deepMerge)(_objectSpread({
- fill: color
- }, align), style);
- }
|