centered-series.js 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. /* *
  2. *
  3. * (c) 2010-2019 Torstein Honsi
  4. *
  5. * License: www.highcharts.com/license
  6. *
  7. * !!!!!!! SOURCE GETS TRANSPILED BY TYPESCRIPT. EDIT TS FILE ONLY. !!!!!!!
  8. *
  9. * */
  10. 'use strict';
  11. import H from '../parts/Globals.js';
  12. /**
  13. * @private
  14. * @interface Highcharts.RadianAngles
  15. */ /**
  16. * @name Highcharts.RadianAngles#end
  17. * @type {number}
  18. */ /**
  19. * @name Highcharts.RadianAngles#start
  20. * @type {number}
  21. */
  22. import U from '../parts/Utilities.js';
  23. var isNumber = U.isNumber, pick = U.pick, relativeLength = U.relativeLength;
  24. var deg2rad = H.deg2rad;
  25. /* eslint-disable valid-jsdoc */
  26. /**
  27. * @private
  28. * @mixin Highcharts.CenteredSeriesMixin
  29. */
  30. H.CenteredSeriesMixin = {
  31. /**
  32. * Get the center of the pie based on the size and center options relative
  33. * to the plot area. Borrowed by the polar and gauge series types.
  34. *
  35. * @private
  36. * @function Highcharts.CenteredSeriesMixin.getCenter
  37. *
  38. * @return {Array<number>}
  39. */
  40. getCenter: function () {
  41. var options = this.options, chart = this.chart, slicingRoom = 2 * (options.slicedOffset || 0), handleSlicingRoom, plotWidth = chart.plotWidth - 2 * slicingRoom, plotHeight = chart.plotHeight - 2 * slicingRoom, centerOption = options.center, positions = [
  42. pick(centerOption[0], '50%'),
  43. pick(centerOption[1], '50%'),
  44. options.size || '100%',
  45. options.innerSize || 0
  46. ], smallestSize = Math.min(plotWidth, plotHeight), i, value;
  47. for (i = 0; i < 4; ++i) {
  48. value = positions[i];
  49. handleSlicingRoom = i < 2 || (i === 2 && /%$/.test(value));
  50. // i == 0: centerX, relative to width
  51. // i == 1: centerY, relative to height
  52. // i == 2: size, relative to smallestSize
  53. // i == 3: innerSize, relative to size
  54. positions[i] = relativeLength(value, [plotWidth, plotHeight, smallestSize, positions[2]][i]) + (handleSlicingRoom ? slicingRoom : 0);
  55. }
  56. // innerSize cannot be larger than size (#3632)
  57. if (positions[3] > positions[2]) {
  58. positions[3] = positions[2];
  59. }
  60. return positions;
  61. },
  62. /**
  63. * getStartAndEndRadians - Calculates start and end angles in radians.
  64. * Used in series types such as pie and sunburst.
  65. *
  66. * @private
  67. * @function Highcharts.CenteredSeriesMixin.getStartAndEndRadians
  68. *
  69. * @param {number} [start]
  70. * Start angle in degrees.
  71. *
  72. * @param {number} [end]
  73. * Start angle in degrees.
  74. *
  75. * @return {Highcharts.RadianAngles}
  76. * Returns an object containing start and end angles as radians.
  77. */
  78. getStartAndEndRadians: function (start, end) {
  79. var startAngle = isNumber(start) ? start : 0, // must be a number
  80. endAngle = ((isNumber(end) && // must be a number
  81. end > startAngle && // must be larger than the start angle
  82. // difference must be less than 360 degrees
  83. (end - startAngle) < 360) ?
  84. end :
  85. startAngle + 360), correction = -90;
  86. return {
  87. start: deg2rad * (startAngle + correction),
  88. end: deg2rad * (endAngle + correction)
  89. };
  90. }
  91. };