circle.js 3.1 KB

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