circle.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { mix } from '../../util/common';
  2. import Abstract from './abstract';
  3. class Circle extends Abstract {
  4. _initDefaultCfg() {
  5. super._initDefaultCfg();
  6. this.startAngle = -Math.PI / 2; // start angle,in radian
  7. this.endAngle = Math.PI * 3 / 2; // end angle, in radian
  8. this.radius = null; // radius
  9. this.center = null; // center
  10. }
  11. getOffsetPoint(value) {
  12. var {
  13. startAngle,
  14. endAngle
  15. } = this;
  16. var angle = startAngle + (endAngle - startAngle) * value;
  17. return this._getCirclePoint(angle);
  18. }
  19. _getCirclePoint(angle, radius) {
  20. var self = this;
  21. var center = self.center;
  22. radius = radius || self.radius;
  23. return {
  24. x: center.x + Math.cos(angle) * radius,
  25. y: center.y + Math.sin(angle) * radius
  26. };
  27. }
  28. getTextAlignInfo(point, offset) {
  29. var self = this;
  30. var offsetVector = self.getOffsetVector(point, offset);
  31. var align;
  32. var baseLine = 'middle';
  33. if (offsetVector[0] > 0) {
  34. align = 'left';
  35. } else if (offsetVector[0] < 0) {
  36. align = 'right';
  37. } else {
  38. align = 'center';
  39. if (offsetVector[1] > 0) {
  40. baseLine = 'top';
  41. } else if (offsetVector[1] < 0) {
  42. baseLine = 'bottom';
  43. }
  44. }
  45. return {
  46. textAlign: align,
  47. textBaseline: baseLine
  48. };
  49. }
  50. getAxisVector(point) {
  51. var center = this.center;
  52. var factor = this.offsetFactor;
  53. return [(point.y - center.y) * factor, (point.x - center.x) * -1 * factor];
  54. }
  55. drawLine(lineCfg) {
  56. var {
  57. center,
  58. radius,
  59. startAngle,
  60. endAngle
  61. } = this;
  62. var container = this.getContainer(lineCfg.top);
  63. container.addShape('arc', {
  64. className: 'axis-line',
  65. attrs: mix({
  66. x: center.x,
  67. y: center.y,
  68. r: radius,
  69. startAngle,
  70. endAngle
  71. }, lineCfg)
  72. });
  73. }
  74. }
  75. Abstract.Circle = Circle;
  76. export default Circle;