UNPKG

@antv/f2

Version:

Charts for mobile visualization.

144 lines (143 loc) 4 kB
"use strict"; 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); };