circle.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import { __assign, __extends } from "tslib";
  2. import { getCirclePoint } from '../util/util';
  3. import CrosshairBase from './base';
  4. var LineCrosshair = /** @class */ (function (_super) {
  5. __extends(LineCrosshair, _super);
  6. function LineCrosshair() {
  7. return _super !== null && _super.apply(this, arguments) || this;
  8. }
  9. LineCrosshair.prototype.getDefaultCfg = function () {
  10. var cfg = _super.prototype.getDefaultCfg.call(this);
  11. return __assign(__assign({}, cfg), { type: 'circle', locationType: 'circle', center: null, radius: 100, startAngle: -Math.PI / 2, endAngle: (Math.PI * 3) / 2 });
  12. };
  13. LineCrosshair.prototype.getRotateAngle = function () {
  14. var _a = this.getLocation(), startAngle = _a.startAngle, endAngle = _a.endAngle;
  15. var position = this.get('text').position;
  16. var tangentAngle = position === 'start' ? startAngle + Math.PI / 2 : endAngle - Math.PI / 2;
  17. return tangentAngle;
  18. };
  19. LineCrosshair.prototype.getTextPoint = function () {
  20. var text = this.get('text');
  21. var position = text.position, offset = text.offset;
  22. var _a = this.getLocation(), center = _a.center, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle;
  23. var angle = position === 'start' ? startAngle : endAngle;
  24. var tangentAngle = this.getRotateAngle() - Math.PI;
  25. var point = getCirclePoint(center, radius, angle);
  26. // 这个地方其实应该求切线向量然后在乘以 offset,但是太啰嗦了,直接给出结果
  27. // const tangent = [Math.cos(tangentAngle), Math.sin(tangentAngle)];
  28. // const offsetVector = vec2.scale([], tangent, offset);
  29. var offsetX = Math.cos(tangentAngle) * offset;
  30. var offsetY = Math.sin(tangentAngle) * offset;
  31. return {
  32. x: point.x + offsetX,
  33. y: point.y + offsetY,
  34. };
  35. };
  36. LineCrosshair.prototype.getLinePath = function () {
  37. var _a = this.getLocation(), center = _a.center, radius = _a.radius, startAngle = _a.startAngle, endAngle = _a.endAngle;
  38. var path = null;
  39. if (endAngle - startAngle === Math.PI * 2) {
  40. // 整圆
  41. var x = center.x, y = center.y;
  42. path = [
  43. ['M', x, y - radius],
  44. ['A', radius, radius, 0, 1, 1, x, y + radius],
  45. ['A', radius, radius, 0, 1, 1, x, y - radius],
  46. ['Z'],
  47. ];
  48. }
  49. else {
  50. var startPoint = getCirclePoint(center, radius, startAngle);
  51. var endPoint = getCirclePoint(center, radius, endAngle);
  52. var large = Math.abs(endAngle - startAngle) > Math.PI ? 1 : 0;
  53. var sweep = startAngle > endAngle ? 0 : 1;
  54. path = [
  55. ['M', startPoint.x, startPoint.y],
  56. ['A', radius, radius, 0, large, sweep, endPoint.x, endPoint.y],
  57. ];
  58. }
  59. return path;
  60. };
  61. return LineCrosshair;
  62. }(CrosshairBase));
  63. export default LineCrosshair;
  64. //# sourceMappingURL=circle.js.map