@antv/f2
Version:
Charts for mobile visualization.
144 lines (143 loc) • 4 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _tslib = require("tslib");
var _fEngine = require("@antv/f-engine");
var _glMatrix = require("gl-matrix");
// 相对圆心偏移量的点
function getOffsetPoint(center, point, offset) {
var vectorX = point.x - center.x;
var vectorY = point.y - center.y;
var vectorLength = _glMatrix.vec2.length([vectorX, vectorY]);
var offsetLength = vectorLength + offset;
var x = vectorX / vectorLength * offsetLength;
var y = vectorY / vectorLength * offsetLength;
return {
x: center.x + x,
y: center.y + y
};
}
// 获取文本的对齐方式
function getTextAlignInfo(center, point) {
// 文本点向量
var vector = [point.x - center.x, point.y - center.y];
var align;
var baseLine;
// 水平对齐
if (vector[0] > 0) {
align = 'left';
} else if (vector[0] < 0) {
align = 'right';
} else {
align = 'center';
}
// 垂直对齐
if (vector[1] > 0) {
baseLine = 'top';
} else if (vector[1] < 0) {
baseLine = 'bottom';
} else {
baseLine = 'middle';
}
return {
textAlign: align,
textBaseline: baseLine
};
}
var Line = function Line(props) {
var line = props.line,
gridType = props.gridType,
center = props.center,
radius = props.radius,
ticks = props.ticks;
if (!line) return null;
if (gridType !== 'line') {
return (0, _fEngine.jsx)("arc", {
attrs: (0, _tslib.__assign)({
cx: center.x,
cy: center.y,
r: radius,
startAngle: 0,
endAngle: 360
}, line)
});
}
var points = ticks.map(function (tick) {
var points = tick.points;
return points[points.length - 1];
});
// 头尾相连
points.push(points[0]);
return (0, _fEngine.jsx)("polyline", {
attrs: (0, _tslib.__assign)({
points: points.map(function (d) {
return [d.x, d.y];
})
}, line)
});
};
var _default = exports.default = function _default(props) {
var originTicks = props.ticks,
coord = props.coord,
style = props.style,
gridType = props.grid;
var center = coord.center;
var grid = style.grid,
tickLine = style.tickLine,
line = style.line,
labelOffset = style.labelOffset,
label = style.label;
var ticks = originTicks.filter(function (d) {
return !isNaN(d.value);
});
var firstTicks = ticks[0];
var points = firstTicks.points;
var end = points[points.length - 1];
var radius = _glMatrix.vec2.length([end.x - center.x, end.y - center.y]);
return (0, _fEngine.jsx)("group", null, grid ? ticks.map(function (tick) {
var points = tick.points,
gridStyle = tick.gridStyle;
var end = points[points.length - 1];
return (0, _fEngine.jsx)("line", {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)({
x1: center.x,
y1: center.y,
x2: end.x,
y2: end.y
}, grid), gridStyle)
});
}) : null, tickLine && tickLine.length ? ticks.map(function (tick) {
var points = tick.points;
var end = points[points.length - 1];
var offsetPoint = getOffsetPoint(center, end, tickLine.length);
return (0, _fEngine.jsx)("line", {
attrs: (0, _tslib.__assign)({
x1: end.x,
y1: end.y,
x2: offsetPoint.x,
y2: offsetPoint.y
}, tickLine)
});
}) : null, (0, _fEngine.jsx)(Line, {
line: line,
gridType: gridType,
center: center,
radius: radius,
ticks: ticks
}), label ? ticks.map(function (tick) {
var points = tick.points,
text = tick.text,
labelStyle = tick.labelStyle;
var end = points[points.length - 1];
var offsetPoint = getOffsetPoint(center, end, labelOffset);
return (0, _fEngine.jsx)("text", {
attrs: (0, _tslib.__assign)((0, _tslib.__assign)((0, _tslib.__assign)({
x: offsetPoint.x,
y: offsetPoint.y,
text: text
}, getTextAlignInfo(center, end)), label), labelStyle)
});
}) : null);
};
;