@antv/g2plot
Version:
An interactive and responsive charting library
68 lines • 2.73 kB
JavaScript
import { __extends } from "tslib";
import { Action, Util } from '@antv/g2';
import { isEqual } from '@antv/util';
import { transform } from '../../../../utils/matrix';
/**
* 饼图 图例激活 action
*/
var PieLegendAction = /** @class */ (function (_super) {
__extends(PieLegendAction, _super);
function PieLegendAction() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* 获取激活的图形元素
*/
PieLegendAction.prototype.getActiveElements = function () {
var delegateObject = Util.getDelegationObject(this.context);
if (delegateObject) {
var view = this.context.view;
var component = delegateObject.component, item_1 = delegateObject.item;
var field_1 = component.get('field');
if (field_1) {
var elements = view.geometries[0].elements;
return elements.filter(function (ele) { return ele.getModel().data[field_1] === item_1.value; });
}
}
return [];
};
/**
* 获取激活的标签
*/
PieLegendAction.prototype.getActiveElementLabels = function () {
var view = this.context.view;
var elements = this.getActiveElements();
var labels = view.geometries[0].labelsContainer.getChildren();
return labels.filter(function (label) { return elements.find(function (ele) { return isEqual(ele.getData(), label.get('data')); }); });
};
PieLegendAction.prototype.transfrom = function (offset) {
if (offset === void 0) { offset = 7.5; }
var elements = this.getActiveElements();
var elementLabels = this.getActiveElementLabels();
elements.forEach(function (element, idx) {
var labelShape = elementLabels[idx];
var coordinate = element.geometry.coordinate;
if (coordinate.isPolar && coordinate.isTransposed) {
var _a = Util.getAngle(element.getModel(), coordinate), startAngle = _a.startAngle, endAngle = _a.endAngle;
var middleAngle = (startAngle + endAngle) / 2;
var r = offset;
var x = r * Math.cos(middleAngle);
var y = r * Math.sin(middleAngle);
element.shape.setMatrix(transform([['t', x, y]]));
labelShape.setMatrix(transform([['t', x, y]]));
}
});
};
PieLegendAction.prototype.active = function () {
this.transfrom();
};
/**
* 激活态还原
*/
PieLegendAction.prototype.reset = function () {
this.transfrom(0);
};
return PieLegendAction;
}(Action));
export { PieLegendAction };
//# sourceMappingURL=legend-active.js.map