UNPKG

@antv/g2plot

Version:

G2 Plot, a market of plots built with the Grammar of Graphics'

49 lines 1.8 kB
import { dotProduct2D } from '../../math'; /** 图形在水平或垂直方向抖开 */ export default function nodeJitter(shape, option, index, cfg) { var nodes = cfg.nodes.nodes; if (index === nodes.length - 1) { return; } var current = nodes[index]; var next = nodes[index + 1]; var _a = alignDirection(current, next), dir = _a.dir, distX = _a.distX, distY = _a.distY; var startPoint = shape.get('startPoint'); if (dir === 'x') { shape.attr('y', startPoint.y + 20); } } function alignDirection(nodeA, nodeB) { var dir; /** 计算两个node 中心点向量的角度 */ var vector = { x: nodeB.centerX - nodeA.centerX, y: nodeB.centerY - nodeA.centerY }; var mag = Math.sqrt(vector.x * vector.x + vector.y * vector.y); var vector_horizontal = { x: 10, y: 0 }; // 水平方向向量 /*tslint:disable*/ var mag_horizontal = Math.sqrt(vector_horizontal.x * vector_horizontal.x + vector_horizontal.y * vector_horizontal.y); var dot = dotProduct2D(vector, vector_horizontal); var angle = ((dot / (mag * mag_horizontal)) * 180) / Math.PI; if (angle < 0) angle = 360 - angle; angle = adjustAngle(angle); // 将角度从0-360转换到0-90 /** 计算两个node在x、y两个方向上的距离 */ var distX = Math.abs(nodeA.centerX - nodeB.centerX); var distY = Math.abs(nodeA.centerY - nodeB.centerY); if (angle > 45) { dir = 'x'; } else if (angle < 45) { dir = 'y'; } return { dir: dir, distX: distX, distY: distY }; } function adjustAngle(angle) { if (angle > 90 && angle <= 180) { return 180 - angle; } if (angle > 180 && angle < 270) { return angle - 180; } return 360 - angle; } //# sourceMappingURL=node-jitter.js.map