legend-active.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import { __extends } from "tslib";
  2. import { Action, Util } from '@antv/g2';
  3. import { isEqual } from '@antv/util';
  4. import { transform } from '../../../../utils/matrix';
  5. /**
  6. * 饼图 图例激活 action
  7. */
  8. var PieLegendAction = /** @class */ (function (_super) {
  9. __extends(PieLegendAction, _super);
  10. function PieLegendAction() {
  11. return _super !== null && _super.apply(this, arguments) || this;
  12. }
  13. /**
  14. * 获取激活的图形元素
  15. */
  16. PieLegendAction.prototype.getActiveElements = function () {
  17. var delegateObject = Util.getDelegationObject(this.context);
  18. if (delegateObject) {
  19. var view = this.context.view;
  20. var component = delegateObject.component, item_1 = delegateObject.item;
  21. var field_1 = component.get('field');
  22. if (field_1) {
  23. var elements = view.geometries[0].elements;
  24. return elements.filter(function (ele) { return ele.getModel().data[field_1] === item_1.value; });
  25. }
  26. }
  27. return [];
  28. };
  29. /**
  30. * 获取激活的标签
  31. */
  32. PieLegendAction.prototype.getActiveElementLabels = function () {
  33. var view = this.context.view;
  34. var elements = this.getActiveElements();
  35. var labels = view.geometries[0].labelsContainer.getChildren();
  36. return labels.filter(function (label) { return elements.find(function (ele) { return isEqual(ele.getData(), label.get('data')); }); });
  37. };
  38. PieLegendAction.prototype.transfrom = function (offset) {
  39. if (offset === void 0) { offset = 7.5; }
  40. var elements = this.getActiveElements();
  41. var elementLabels = this.getActiveElementLabels();
  42. elements.forEach(function (element, idx) {
  43. var labelShape = elementLabels[idx];
  44. var coordinate = element.geometry.coordinate;
  45. if (coordinate.isPolar && coordinate.isTransposed) {
  46. var _a = Util.getAngle(element.getModel(), coordinate), startAngle = _a.startAngle, endAngle = _a.endAngle;
  47. var middleAngle = (startAngle + endAngle) / 2;
  48. var r = offset;
  49. var x = r * Math.cos(middleAngle);
  50. var y = r * Math.sin(middleAngle);
  51. element.shape.setMatrix(transform([['t', x, y]]));
  52. labelShape.setMatrix(transform([['t', x, y]]));
  53. }
  54. });
  55. };
  56. PieLegendAction.prototype.active = function () {
  57. this.transfrom();
  58. };
  59. /**
  60. * 激活态还原
  61. */
  62. PieLegendAction.prototype.reset = function () {
  63. this.transfrom(0);
  64. };
  65. return PieLegendAction;
  66. }(Action));
  67. export { PieLegendAction };
  68. //# sourceMappingURL=legend-active.js.map