| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import { __assign, __extends } from "tslib";
- import { isNumber, isString } from '@antv/util';
- import GroupComponent from '../abstract/group-component';
- import { renderTag } from '../util/graphic';
- import Theme from '../util/theme';
- import { getValueByPercent } from '../util/util';
- var LineAnnotation = /** @class */ (function (_super) {
- __extends(LineAnnotation, _super);
- function LineAnnotation() {
- return _super !== null && _super.apply(this, arguments) || this;
- }
- /**
- * @protected
- * 默认的配置项
- * @returns {object} 默认的配置项
- */
- LineAnnotation.prototype.getDefaultCfg = function () {
- var cfg = _super.prototype.getDefaultCfg.call(this);
- return __assign(__assign({}, cfg), { name: 'annotation', type: 'line', locationType: 'region', start: null, end: null, style: {}, text: null, defaultCfg: {
- style: {
- fill: Theme.textColor,
- fontSize: 12,
- textAlign: 'center',
- textBaseline: 'bottom',
- fontFamily: Theme.fontFamily,
- },
- text: {
- position: 'center',
- autoRotate: true,
- content: null,
- offsetX: 0,
- offsetY: 0,
- style: {
- stroke: Theme.lineColor,
- lineWidth: 1,
- },
- },
- } });
- };
- LineAnnotation.prototype.renderInner = function (group) {
- this.renderLine(group);
- if (this.get('text')) {
- this.renderLabel(group);
- }
- };
- // 绘制线
- LineAnnotation.prototype.renderLine = function (group) {
- var start = this.get('start');
- var end = this.get('end');
- var style = this.get('style');
- this.addShape(group, {
- type: 'line',
- id: this.getElementId('line'),
- name: 'annotation-line',
- attrs: __assign({ x1: start.x, y1: start.y, x2: end.x, y2: end.y }, style),
- });
- };
- // 获取 label 的位置
- LineAnnotation.prototype.getLabelPoint = function (start, end, position) {
- var percent;
- if (position === 'start') {
- percent = 0;
- }
- else if (position === 'center') {
- percent = 0.5;
- }
- else if (isString(position) && position.indexOf('%') !== -1) {
- percent = parseInt(position, 10) / 100;
- }
- else if (isNumber(position)) {
- percent = position;
- }
- else {
- percent = 1;
- }
- if (percent > 1 || percent < 0) {
- percent = 1;
- }
- return {
- x: getValueByPercent(start.x, end.x, percent),
- y: getValueByPercent(start.y, end.y, percent),
- };
- };
- // 绘制 label
- LineAnnotation.prototype.renderLabel = function (group) {
- var text = this.get('text');
- var start = this.get('start');
- var end = this.get('end');
- var position = text.position, content = text.content, style = text.style, offsetX = text.offsetX, offsetY = text.offsetY, autoRotate = text.autoRotate, maxLength = text.maxLength, autoEllipsis = text.autoEllipsis, ellipsisPosition = text.ellipsisPosition, background = text.background, _a = text.isVertical, isVertical = _a === void 0 ? false : _a;
- var point = this.getLabelPoint(start, end, position);
- var x = point.x + offsetX;
- var y = point.y + offsetY;
- var cfg = {
- id: this.getElementId('line-text'),
- name: 'annotation-line-text',
- x: x,
- y: y,
- content: content,
- style: style,
- maxLength: maxLength,
- autoEllipsis: autoEllipsis,
- ellipsisPosition: ellipsisPosition,
- background: background,
- isVertical: isVertical,
- };
- // 如果自动旋转
- if (autoRotate) {
- var vector = [end.x - start.x, end.y - start.y];
- cfg.rotate = Math.atan2(vector[1], vector[0]);
- }
- renderTag(group, cfg);
- };
- return LineAnnotation;
- }(GroupComponent));
- export default LineAnnotation;
- //# sourceMappingURL=line.js.map
|