Ellipse.js 861 B

1234567891011121314151617181920212223242526272829303132333435
  1. var Path = require("../Path");
  2. /**
  3. * 椭圆形状
  4. * @module zrender/graphic/shape/Ellipse
  5. */
  6. var _default = Path.extend({
  7. type: 'ellipse',
  8. shape: {
  9. cx: 0,
  10. cy: 0,
  11. rx: 0,
  12. ry: 0
  13. },
  14. buildPath: function (ctx, shape) {
  15. var k = 0.5522848;
  16. var x = shape.cx;
  17. var y = shape.cy;
  18. var a = shape.rx;
  19. var b = shape.ry;
  20. var ox = a * k; // 水平控制点偏移量
  21. var oy = b * k; // 垂直控制点偏移量
  22. // 从椭圆的左端点开始顺时针绘制四条三次贝塞尔曲线
  23. ctx.moveTo(x - a, y);
  24. ctx.bezierCurveTo(x - a, y - oy, x - ox, y - b, x, y - b);
  25. ctx.bezierCurveTo(x + ox, y - b, x + a, y - oy, x + a, y);
  26. ctx.bezierCurveTo(x + a, y + oy, x + ox, y + b, x, y + b);
  27. ctx.bezierCurveTo(x - ox, y + b, x - a, y + oy, x - a, y);
  28. ctx.closePath();
  29. }
  30. });
  31. module.exports = _default;