NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/geometry/label/polar.js

185 lines
5.9 KiB
Java
Raw Normal View History

2023-09-14 14:47:11 +08:00
import { __assign, __extends } from "tslib";
import { each, isArray } from '@antv/util';
import { getDistanceToCenter } from '../../util/coordinate';
import { getAngleByPoint } from '../../util/coordinate';
import GeometryLabel from './base';
var HALF_PI = Math.PI / 2;
/**
* 极坐标下的图形 label
*/
var PolarLabel = /** @class */ (function (_super) {
__extends(PolarLabel, _super);
function PolarLabel() {
return _super !== null && _super.apply(this, arguments) || this;
}
/**
* @override
* 获取文本的对齐方式
* @param point
*/
PolarLabel.prototype.getLabelAlign = function (point) {
var coordinate = this.getCoordinate();
var align;
if (point.labelEmit) {
align = (point.angle <= Math.PI / 2 && point.angle >= -Math.PI / 2) ? 'left' : 'right';
}
else if (!coordinate.isTransposed) {
align = 'center';
}
else {
var center = coordinate.getCenter();
var offset = this.getDefaultOffset(point.offset);
if (Math.abs(point.x - center.x) < 1) {
align = 'center';
}
else if (point.angle > Math.PI || point.angle <= 0) {
align = offset > 0 ? 'left' : 'right';
}
else {
align = offset > 0 ? 'right' : 'left';
}
}
return align;
};
/**
* @override
* 获取 label 的位置
* @param labelCfg
* @param mappingData
* @param index
*/
PolarLabel.prototype.getLabelPoint = function (labelCfg, mappingData, index) {
var factor = 1;
var arcPoint;
var content = labelCfg.content[index];
if (this.isToMiddle(mappingData)) {
arcPoint = this.getMiddlePoint(mappingData.points);
}
else {
if (labelCfg.content.length === 1 && index === 0) {
index = 1;
}
else if (index === 0) {
factor = -1;
}
arcPoint = this.getArcPoint(mappingData, index);
}
var offset = this.getDefaultOffset(labelCfg.offset) * factor;
var middleAngle = this.getPointAngle(arcPoint);
var isLabelEmit = labelCfg.labelEmit;
var labelPositionCfg = this.getCirclePoint(middleAngle, offset, arcPoint, isLabelEmit);
if (labelPositionCfg.r === 0) {
// 如果文本位置位于圆心,则不展示
labelPositionCfg.content = '';
}
else {
labelPositionCfg.content = content;
labelPositionCfg.angle = middleAngle;
labelPositionCfg.color = mappingData.color;
}
labelPositionCfg.rotate = labelCfg.autoRotate
? this.getLabelRotate(middleAngle, offset, isLabelEmit)
: labelCfg.rotate;
labelPositionCfg.start = {
x: arcPoint.x,
y: arcPoint.y,
};
return labelPositionCfg;
};
/**
* 获取圆弧的位置
*/
PolarLabel.prototype.getArcPoint = function (mappingData, index) {
if (index === void 0) { index = 0; }
if (!isArray(mappingData.x) && !isArray(mappingData.y)) {
return {
x: mappingData.x,
y: mappingData.y,
};
}
return {
x: isArray(mappingData.x) ? mappingData.x[index] : mappingData.x,
y: isArray(mappingData.y) ? mappingData.y[index] : mappingData.y,
};
};
/**
* 计算坐标线点在极坐标系下角度
* @param point
*/
PolarLabel.prototype.getPointAngle = function (point) {
return getAngleByPoint(this.getCoordinate(), point);
};
/**
* 获取坐标点与圆心形成的圆的位置信息
* @param angle
* @param offset
* @param point
* @param isLabelEmit
*/
PolarLabel.prototype.getCirclePoint = function (angle, offset, point, isLabelEmit) {
var coordinate = this.getCoordinate();
var center = coordinate.getCenter();
var r = getDistanceToCenter(coordinate, point);
if (r === 0) {
return __assign(__assign({}, center), { r: r });
}
var labelAngle = angle;
if (coordinate.isTransposed && r > offset && !isLabelEmit) {
var appendAngle = Math.asin(offset / (2 * r));
labelAngle = angle + appendAngle * 2;
}
else {
r = r + offset;
}
return {
x: center.x + r * Math.cos(labelAngle),
y: center.y + r * Math.sin(labelAngle),
r: r,
};
};
/**
* 获取 label 的旋转角度
* @param angle
* @param offset
* @param isLabelEmit
*/
PolarLabel.prototype.getLabelRotate = function (angle, offset, isLabelEmit) {
var rotate = angle + HALF_PI;
if (isLabelEmit) {
rotate -= HALF_PI;
}
if (rotate) {
if (rotate > HALF_PI) {
rotate = rotate - Math.PI;
}
else if (rotate < -HALF_PI) {
rotate = rotate + Math.PI;
}
}
return rotate;
};
// 获取中心的位置
PolarLabel.prototype.getMiddlePoint = function (points) {
var coordinate = this.getCoordinate();
var count = points.length;
var middlePoint = {
x: 0,
y: 0,
};
each(points, function (point) {
middlePoint.x += point.x;
middlePoint.y += point.y;
});
middlePoint.x /= count;
middlePoint.y /= count;
middlePoint = coordinate.convert(middlePoint);
return middlePoint;
};
// 是否居中
PolarLabel.prototype.isToMiddle = function (mappingData) {
return mappingData.x.length > 2;
};
return PolarLabel;
}(GeometryLabel));
export default PolarLabel;
//# sourceMappingURL=polar.js.map