6cfecfef6282c6451c17111c3c4d63dd13de54639f83fa315a313b3840ed2a7c96f9f1836994daab8b5b7f2bf57be0ab96c1cc1a2f6a4e04d3ff94803108fd 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. Object.defineProperty(exports, "__esModule", {
  4. value: true
  5. });
  6. exports.radarAxis = radarAxis;
  7. var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
  8. var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
  9. var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
  10. var _updater = require("../class/updater.class");
  11. var _index = require("../config/index");
  12. var _util = require("@jiaminghi/c-render/lib/plugin/util");
  13. var _util2 = require("../util");
  14. 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; }
  15. 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; }
  16. function radarAxis(chart) {
  17. var option = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  18. var radar = option.radar;
  19. var radarAxis = [];
  20. if (radar) {
  21. radarAxis = mergeRadarAxisDefaultConfig(radar);
  22. radarAxis = calcRadarAxisCenter(radarAxis, chart);
  23. radarAxis = calcRadarAxisRingRadius(radarAxis, chart);
  24. radarAxis = calcRadarAxisLinePosition(radarAxis);
  25. radarAxis = calcRadarAxisAreaRadius(radarAxis);
  26. radarAxis = calcRadarAxisLabelPosition(radarAxis);
  27. radarAxis = [radarAxis];
  28. }
  29. var radarAxisForUpdate = radarAxis;
  30. if (radarAxis.length && !radarAxis[0].show) radarAxisForUpdate = [];
  31. (0, _updater.doUpdate)({
  32. chart: chart,
  33. series: radarAxisForUpdate,
  34. key: 'radarAxisSplitArea',
  35. getGraphConfig: getSplitAreaConfig,
  36. beforeUpdate: beforeUpdateSplitArea,
  37. beforeChange: beforeChangeSplitArea
  38. });
  39. (0, _updater.doUpdate)({
  40. chart: chart,
  41. series: radarAxisForUpdate,
  42. key: 'radarAxisSplitLine',
  43. getGraphConfig: getSplitLineConfig,
  44. beforeUpdate: beforeUpdateSplitLine,
  45. beforeChange: beforeChangeSplitLine
  46. });
  47. (0, _updater.doUpdate)({
  48. chart: chart,
  49. series: radarAxisForUpdate,
  50. key: 'radarAxisLine',
  51. getGraphConfig: getAxisLineConfig
  52. });
  53. (0, _updater.doUpdate)({
  54. chart: chart,
  55. series: radarAxisForUpdate,
  56. key: 'radarAxisLable',
  57. getGraphConfig: getAxisLabelConfig
  58. });
  59. chart.radarAxis = radarAxis[0];
  60. }
  61. function mergeRadarAxisDefaultConfig(radar) {
  62. return (0, _util2.deepMerge)((0, _util.deepClone)(_index.radarAxisConfig), radar);
  63. }
  64. function calcRadarAxisCenter(radarAxis, chart) {
  65. var area = chart.render.area;
  66. var center = radarAxis.center;
  67. radarAxis.centerPos = center.map(function (v, i) {
  68. if (typeof v === 'number') return v;
  69. return parseInt(v) / 100 * area[i];
  70. });
  71. return radarAxis;
  72. }
  73. function calcRadarAxisRingRadius(radarAxis, chart) {
  74. var area = chart.render.area;
  75. var splitNum = radarAxis.splitNum,
  76. radius = radarAxis.radius;
  77. var maxRadius = Math.min.apply(Math, (0, _toConsumableArray2["default"])(area)) / 2;
  78. if (typeof radius !== 'number') radius = parseInt(radius) / 100 * maxRadius;
  79. var splitGap = radius / splitNum;
  80. radarAxis.ringRadius = new Array(splitNum).fill(0).map(function (foo, i) {
  81. return splitGap * (i + 1);
  82. });
  83. radarAxis.radius = radius;
  84. return radarAxis;
  85. }
  86. function calcRadarAxisLinePosition(radarAxis) {
  87. var indicator = radarAxis.indicator,
  88. centerPos = radarAxis.centerPos,
  89. radius = radarAxis.radius,
  90. startAngle = radarAxis.startAngle;
  91. var fullAngle = Math.PI * 2;
  92. var indicatorNum = indicator.length;
  93. var indicatorGap = fullAngle / indicatorNum;
  94. var angles = new Array(indicatorNum).fill(0).map(function (foo, i) {
  95. return indicatorGap * i + startAngle;
  96. });
  97. radarAxis.axisLineAngles = angles;
  98. radarAxis.axisLinePosition = angles.map(function (g) {
  99. return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, g]));
  100. });
  101. return radarAxis;
  102. }
  103. function calcRadarAxisAreaRadius(radarAxis) {
  104. var ringRadius = radarAxis.ringRadius;
  105. var subRadius = ringRadius[0] / 2;
  106. radarAxis.areaRadius = ringRadius.map(function (r) {
  107. return r - subRadius;
  108. });
  109. return radarAxis;
  110. }
  111. function calcRadarAxisLabelPosition(radarAxis) {
  112. var axisLineAngles = radarAxis.axisLineAngles,
  113. centerPos = radarAxis.centerPos,
  114. radius = radarAxis.radius,
  115. axisLabel = radarAxis.axisLabel;
  116. radius += axisLabel.labelGap;
  117. radarAxis.axisLabelPosition = axisLineAngles.map(function (angle) {
  118. return _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([radius, angle]));
  119. });
  120. return radarAxis;
  121. }
  122. function getSplitAreaConfig(radarAxis) {
  123. var areaRadius = radarAxis.areaRadius,
  124. polygon = radarAxis.polygon,
  125. animationCurve = radarAxis.animationCurve,
  126. animationFrame = radarAxis.animationFrame,
  127. rLevel = radarAxis.rLevel;
  128. var name = polygon ? 'regPolygon' : 'ring';
  129. return areaRadius.map(function (foo, i) {
  130. return {
  131. name: name,
  132. index: rLevel,
  133. visible: radarAxis.splitArea.show,
  134. animationCurve: animationCurve,
  135. animationFrame: animationFrame,
  136. shape: getSplitAreaShape(radarAxis, i),
  137. style: getSplitAreaStyle(radarAxis, i)
  138. };
  139. });
  140. }
  141. function getSplitAreaShape(radarAxis, i) {
  142. var polygon = radarAxis.polygon,
  143. areaRadius = radarAxis.areaRadius,
  144. indicator = radarAxis.indicator,
  145. centerPos = radarAxis.centerPos;
  146. var indicatorNum = indicator.length;
  147. var shape = {
  148. rx: centerPos[0],
  149. ry: centerPos[1],
  150. r: areaRadius[i]
  151. };
  152. if (polygon) shape.side = indicatorNum;
  153. return shape;
  154. }
  155. function getSplitAreaStyle(radarAxis, i) {
  156. var splitArea = radarAxis.splitArea,
  157. ringRadius = radarAxis.ringRadius,
  158. axisLineAngles = radarAxis.axisLineAngles,
  159. polygon = radarAxis.polygon,
  160. centerPos = radarAxis.centerPos;
  161. var color = splitArea.color,
  162. style = splitArea.style;
  163. style = _objectSpread({
  164. fill: 'rgba(0, 0, 0, 0)'
  165. }, style);
  166. var lineWidth = ringRadius[0] - 0;
  167. if (polygon) {
  168. var point1 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[0]]));
  169. var point2 = _util.getCircleRadianPoint.apply(void 0, (0, _toConsumableArray2["default"])(centerPos).concat([ringRadius[0], axisLineAngles[1]]));
  170. lineWidth = (0, _util2.getPointToLineDistance)(centerPos, point1, point2);
  171. }
  172. style = (0, _util2.deepMerge)((0, _util.deepClone)(style, true), {
  173. lineWidth: lineWidth
  174. });
  175. if (!color.length) return style;
  176. var colorNum = color.length;
  177. return (0, _util2.deepMerge)(style, {
  178. stroke: color[i % colorNum]
  179. });
  180. }
  181. function beforeUpdateSplitArea(graphs, radarAxis, i, updater) {
  182. var cache = graphs[i];
  183. if (!cache) return;
  184. var render = updater.chart.render;
  185. var polygon = radarAxis.polygon;
  186. var name = cache[0].name;
  187. var currentName = polygon ? 'regPolygon' : 'ring';
  188. var delAll = currentName !== name;
  189. if (!delAll) return;
  190. cache.forEach(function (g) {
  191. return render.delGraph(g);
  192. });
  193. graphs[i] = null;
  194. }
  195. function beforeChangeSplitArea(graph, config) {
  196. var side = config.shape.side;
  197. if (typeof side !== 'number') return;
  198. graph.shape.side = side;
  199. }
  200. function getSplitLineConfig(radarAxis) {
  201. var ringRadius = radarAxis.ringRadius,
  202. polygon = radarAxis.polygon,
  203. animationCurve = radarAxis.animationCurve,
  204. animationFrame = radarAxis.animationFrame,
  205. rLevel = radarAxis.rLevel;
  206. var name = polygon ? 'regPolygon' : 'ring';
  207. return ringRadius.map(function (foo, i) {
  208. return {
  209. name: name,
  210. index: rLevel,
  211. animationCurve: animationCurve,
  212. animationFrame: animationFrame,
  213. visible: radarAxis.splitLine.show,
  214. shape: getSplitLineShape(radarAxis, i),
  215. style: getSplitLineStyle(radarAxis, i)
  216. };
  217. });
  218. }
  219. function getSplitLineShape(radarAxis, i) {
  220. var ringRadius = radarAxis.ringRadius,
  221. centerPos = radarAxis.centerPos,
  222. indicator = radarAxis.indicator,
  223. polygon = radarAxis.polygon;
  224. var shape = {
  225. rx: centerPos[0],
  226. ry: centerPos[1],
  227. r: ringRadius[i]
  228. };
  229. var indicatorNum = indicator.length;
  230. if (polygon) shape.side = indicatorNum;
  231. return shape;
  232. }
  233. function getSplitLineStyle(radarAxis, i) {
  234. var splitLine = radarAxis.splitLine;
  235. var color = splitLine.color,
  236. style = splitLine.style;
  237. style = _objectSpread({
  238. fill: 'rgba(0, 0, 0, 0)'
  239. }, style);
  240. if (!color.length) return style;
  241. var colorNum = color.length;
  242. return (0, _util2.deepMerge)(style, {
  243. stroke: color[i % colorNum]
  244. });
  245. }
  246. function beforeUpdateSplitLine(graphs, radarAxis, i, updater) {
  247. var cache = graphs[i];
  248. if (!cache) return;
  249. var render = updater.chart.render;
  250. var polygon = radarAxis.polygon;
  251. var name = cache[0].name;
  252. var currenName = polygon ? 'regPolygon' : 'ring';
  253. var delAll = currenName !== name;
  254. if (!delAll) return;
  255. cache.forEach(function (g) {
  256. return render.delGraph(g);
  257. });
  258. graphs[i] = null;
  259. }
  260. function beforeChangeSplitLine(graph, config) {
  261. var side = config.shape.side;
  262. if (typeof side !== 'number') return;
  263. graph.shape.side = side;
  264. }
  265. function getAxisLineConfig(radarAxis) {
  266. var axisLinePosition = radarAxis.axisLinePosition,
  267. animationCurve = radarAxis.animationCurve,
  268. animationFrame = radarAxis.animationFrame,
  269. rLevel = radarAxis.rLevel;
  270. return axisLinePosition.map(function (foo, i) {
  271. return {
  272. name: 'polyline',
  273. index: rLevel,
  274. visible: radarAxis.axisLine.show,
  275. animationCurve: animationCurve,
  276. animationFrame: animationFrame,
  277. shape: getAxisLineShape(radarAxis, i),
  278. style: getAxisLineStyle(radarAxis, i)
  279. };
  280. });
  281. }
  282. function getAxisLineShape(radarAxis, i) {
  283. var centerPos = radarAxis.centerPos,
  284. axisLinePosition = radarAxis.axisLinePosition;
  285. var points = [centerPos, axisLinePosition[i]];
  286. return {
  287. points: points
  288. };
  289. }
  290. function getAxisLineStyle(radarAxis, i) {
  291. var axisLine = radarAxis.axisLine;
  292. var color = axisLine.color,
  293. style = axisLine.style;
  294. if (!color.length) return style;
  295. var colorNum = color.length;
  296. return (0, _util2.deepMerge)(style, {
  297. stroke: color[i % colorNum]
  298. });
  299. }
  300. function getAxisLabelConfig(radarAxis) {
  301. var axisLabelPosition = radarAxis.axisLabelPosition,
  302. animationCurve = radarAxis.animationCurve,
  303. animationFrame = radarAxis.animationFrame,
  304. rLevel = radarAxis.rLevel;
  305. return axisLabelPosition.map(function (foo, i) {
  306. return {
  307. name: 'text',
  308. index: rLevel,
  309. visible: radarAxis.axisLabel.show,
  310. animationCurve: animationCurve,
  311. animationFrame: animationFrame,
  312. shape: getAxisLableShape(radarAxis, i),
  313. style: getAxisLableStyle(radarAxis, i)
  314. };
  315. });
  316. }
  317. function getAxisLableShape(radarAxis, i) {
  318. var axisLabelPosition = radarAxis.axisLabelPosition,
  319. indicator = radarAxis.indicator;
  320. return {
  321. content: indicator[i].name,
  322. position: axisLabelPosition[i]
  323. };
  324. }
  325. function getAxisLableStyle(radarAxis, i) {
  326. var axisLabel = radarAxis.axisLabel,
  327. _radarAxis$centerPos = (0, _slicedToArray2["default"])(radarAxis.centerPos, 2),
  328. x = _radarAxis$centerPos[0],
  329. y = _radarAxis$centerPos[1],
  330. axisLabelPosition = radarAxis.axisLabelPosition;
  331. var color = axisLabel.color,
  332. style = axisLabel.style;
  333. var _axisLabelPosition$i = (0, _slicedToArray2["default"])(axisLabelPosition[i], 2),
  334. labelXpos = _axisLabelPosition$i[0],
  335. labelYPos = _axisLabelPosition$i[1];
  336. var textAlign = labelXpos > x ? 'left' : 'right';
  337. var textBaseline = labelYPos > y ? 'top' : 'bottom';
  338. style = (0, _util2.deepMerge)({
  339. textAlign: textAlign,
  340. textBaseline: textBaseline
  341. }, style);
  342. if (!color.length) return style;
  343. var colorNum = color.length;
  344. return (0, _util2.deepMerge)(style, {
  345. fill: color[i % colorNum]
  346. });
  347. }