04ed8fee8e852b38ea91a9e495f6623089a44e1bbe118d00ee5225c653d93e85776746f7bed79b16f5af76d88d0638679c1cc3026e69a079eb8eb0f3b3c7eb 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.radar = radar;
  7. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  8. var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
  9. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  10. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  11. var _updater = require("../class/updater.class");
  12. var _index = require("../config/index");
  13. var _util = require("@jiaminghi/c-render/lib/plugin/util");
  14. var _color = require("@jiaminghi/color");
  15. var _util2 = require("../util");
  16. 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; }
  17. 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; }
  18. function radar(chart) {
  19. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  20. var series = option.series;
  21. if (!series) series = [];
  22. var radars = (0, _util2.initNeedSeries)(series, _index.radarConfig, 'radar');
  23. radars = calcRadarPosition(radars, chart);
  24. radars = calcRadarLabelPosition(radars, chart);
  25. radars = calcRadarLabelAlign(radars, chart);
  26. (0, _updater.doUpdate)({
  27. chart: chart,
  28. series: radars,
  29. key: 'radar',
  30. getGraphConfig: getRadarConfig,
  31. getStartGraphConfig: getStartRadarConfig,
  32. beforeChange: beforeChangeRadar
  33. });
  34. (0, _updater.doUpdate)({
  35. chart: chart,
  36. series: radars,
  37. key: 'radarPoint',
  38. getGraphConfig: getPointConfig,
  39. getStartGraphConfig: getStartPointConfig
  40. });
  41. (0, _updater.doUpdate)({
  42. chart: chart,
  43. series: radars,
  44. key: 'radarLabel',
  45. getGraphConfig: getLabelConfig
  46. });
  47. }
  48. function calcRadarPosition(radars, chart) {
  49. var radarAxis = chart.radarAxis;
  50. if (!radarAxis) return [];
  51. var indicator = radarAxis.indicator,
  52. axisLineAngles = radarAxis.axisLineAngles,
  53. radius = radarAxis.radius,
  54. centerPos = radarAxis.centerPos;
  55. radars.forEach(function (radarItem) {
  56. var data = radarItem.data;
  57. radarItem.dataRadius = [];
  58. radarItem.radarPosition = indicator.map(function (_ref, i) {
  59. var max = _ref.max,
  60. min = _ref.min;
  61. var v = data[i];
  62. if (typeof max !== 'number') max = v;
  63. if (typeof min !== 'number') min = 0;
  64. if (typeof v !== 'number') v = min;
  65. var dataRadius = (v - min) / (max - min) * radius;
  66. radarItem.dataRadius[i] = dataRadius;
  67. return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([dataRadius, axisLineAngles[i]]));
  68. });
  69. });
  70. return radars;
  71. }
  72. function calcRadarLabelPosition(radars, chart) {
  73. var radarAxis = chart.radarAxis;
  74. if (!radarAxis) return [];
  75. var centerPos = radarAxis.centerPos,
  76. axisLineAngles = radarAxis.axisLineAngles;
  77. radars.forEach(function (radarItem) {
  78. var dataRadius = radarItem.dataRadius,
  79. label = radarItem.label;
  80. var labelGap = label.labelGap;
  81. radarItem.labelPosition = dataRadius.map(function (r, i) {
  82. return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([r + labelGap, axisLineAngles[i]]));
  83. });
  84. });
  85. return radars;
  86. }
  87. function calcRadarLabelAlign(radars, chart) {
  88. var radarAxis = chart.radarAxis;
  89. if (!radarAxis) return [];
  90. var _radarAxis$centerPos = (0, _slicedToArray2["default"])(radarAxis.centerPos, 2),
  91. x = _radarAxis$centerPos[0],
  92. y = _radarAxis$centerPos[1];
  93. radars.forEach(function (radarItem) {
  94. var labelPosition = radarItem.labelPosition;
  95. var labelAlign = labelPosition.map(function (_ref2) {
  96. var _ref3 = (0, _slicedToArray2["default"])(_ref2, 2),
  97. lx = _ref3[0],
  98. ly = _ref3[1];
  99. var textAlign = lx > x ? 'left' : 'right';
  100. var textBaseline = ly > y ? 'top' : 'bottom';
  101. return {
  102. textAlign: textAlign,
  103. textBaseline: textBaseline
  104. };
  105. });
  106. radarItem.labelAlign = labelAlign;
  107. });
  108. return radars;
  109. }
  110. function getRadarConfig(radarItem) {
  111. var animationCurve = radarItem.animationCurve,
  112. animationFrame = radarItem.animationFrame,
  113. rLevel = radarItem.rLevel;
  114. return [{
  115. name: 'polyline',
  116. index: rLevel,
  117. animationCurve: animationCurve,
  118. animationFrame: animationFrame,
  119. shape: getRadarShape(radarItem),
  120. style: getRadarStyle(radarItem)
  121. }];
  122. }
  123. function getStartRadarConfig(radarItem, updater) {
  124. var centerPos = updater.chart.radarAxis.centerPos;
  125. var config = getRadarConfig(radarItem)[0];
  126. var pointNum = config.shape.points.length;
  127. var points = new Array(pointNum).fill(0).map(function (foo) {
  128. return (0, _toConsumableArray2["default"])(centerPos);
  129. });
  130. config.shape.points = points;
  131. return [config];
  132. }
  133. function getRadarShape(radarItem) {
  134. var radarPosition = radarItem.radarPosition;
  135. return {
  136. points: radarPosition,
  137. close: true
  138. };
  139. }
  140. function getRadarStyle(radarItem) {
  141. var radarStyle = radarItem.radarStyle,
  142. color = radarItem.color;
  143. var colorRgbaValue = (0, _color.getRgbaValue)(color);
  144. colorRgbaValue[3] = 0.5;
  145. var radarDefaultColor = {
  146. stroke: color,
  147. fill: (0, _color.getColorFromRgbValue)(colorRgbaValue)
  148. };
  149. return (0, _util2.deepMerge)(radarDefaultColor, radarStyle);
  150. }
  151. function beforeChangeRadar(graph, _ref4) {
  152. var shape = _ref4.shape;
  153. var graphPoints = graph.shape.points;
  154. var graphPointsNum = graphPoints.length;
  155. var pointsNum = shape.points.length;
  156. if (pointsNum > graphPointsNum) {
  157. var lastPoint = graphPoints.slice(-1)[0];
  158. var newAddPoints = new Array(pointsNum - graphPointsNum).fill(0).map(function (foo) {
  159. return (0, _toConsumableArray2["default"])(lastPoint);
  160. });
  161. graphPoints.push.apply(graphPoints, (0, _toConsumableArray2["default"])(newAddPoints));
  162. } else if (pointsNum < graphPointsNum) {
  163. graphPoints.splice(pointsNum);
  164. }
  165. }
  166. function getPointConfig(radarItem) {
  167. var radarPosition = radarItem.radarPosition,
  168. animationCurve = radarItem.animationCurve,
  169. animationFrame = radarItem.animationFrame,
  170. rLevel = radarItem.rLevel;
  171. return radarPosition.map(function (foo, i) {
  172. return {
  173. name: 'circle',
  174. index: rLevel,
  175. animationCurve: animationCurve,
  176. animationFrame: animationFrame,
  177. visible: radarItem.point.show,
  178. shape: getPointShape(radarItem, i),
  179. style: getPointStyle(radarItem, i)
  180. };
  181. });
  182. }
  183. function getStartPointConfig(radarItem) {
  184. var configs = getPointConfig(radarItem);
  185. configs.forEach(function (config) {
  186. return config.shape.r = 0.01;
  187. });
  188. return configs;
  189. }
  190. function getPointShape(radarItem, i) {
  191. var radarPosition = radarItem.radarPosition,
  192. point = radarItem.point;
  193. var radius = point.radius;
  194. var position = radarPosition[i];
  195. return {
  196. rx: position[0],
  197. ry: position[1],
  198. r: radius
  199. };
  200. }
  201. function getPointStyle(radarItem, i) {
  202. var point = radarItem.point,
  203. color = radarItem.color;
  204. var style = point.style;
  205. return (0, _util2.deepMerge)({
  206. stroke: color
  207. }, style);
  208. }
  209. function getLabelConfig(radarItem) {
  210. var labelPosition = radarItem.labelPosition,
  211. animationCurve = radarItem.animationCurve,
  212. animationFrame = radarItem.animationFrame,
  213. rLevel = radarItem.rLevel;
  214. return labelPosition.map(function (foo, i) {
  215. return {
  216. name: 'text',
  217. index: rLevel,
  218. visible: radarItem.label.show,
  219. animationCurve: animationCurve,
  220. animationFrame: animationFrame,
  221. shape: getLabelShape(radarItem, i),
  222. style: getLabelStyle(radarItem, i)
  223. };
  224. });
  225. }
  226. function getLabelShape(radarItem, i) {
  227. var labelPosition = radarItem.labelPosition,
  228. label = radarItem.label,
  229. data = radarItem.data;
  230. var offset = label.offset,
  231. formatter = label.formatter;
  232. var position = mergePointOffset(labelPosition[i], offset);
  233. var labelText = data[i] ? data[i].toString() : '0';
  234. var formatterType = (0, _typeof2["default"])(formatter);
  235. if (formatterType === 'string') labelText = formatter.replace('{value}', labelText);
  236. if (formatterType === 'function') labelText = formatter(labelText);
  237. return {
  238. content: labelText,
  239. position: position
  240. };
  241. }
  242. function mergePointOffset(_ref5, _ref6) {
  243. var _ref7 = (0, _slicedToArray2["default"])(_ref5, 2),
  244. x = _ref7[0],
  245. y = _ref7[1];
  246. var _ref8 = (0, _slicedToArray2["default"])(_ref6, 2),
  247. ox = _ref8[0],
  248. oy = _ref8[1];
  249. return [x + ox, y + oy];
  250. }
  251. function getLabelStyle(radarItem, i) {
  252. var label = radarItem.label,
  253. color = radarItem.color,
  254. labelAlign = radarItem.labelAlign;
  255. var style = label.style;
  256. var defaultColorAndAlign = _objectSpread({
  257. fill: color
  258. }, labelAlign[i]);
  259. return (0, _util2.deepMerge)(defaultColorAndAlign, style);
  260. }