2024-03-16 02:55:43 +08:00
|
|
|
export function calcPath(x1, x2, y1, y2, zoom = 1) {
|
2024-03-11 08:45:44 +08:00
|
|
|
const tableWidth = 200 * zoom;
|
|
|
|
if (y1 <= y2) {
|
|
|
|
if (x1 + tableWidth <= x2) {
|
|
|
|
x2 -= 14;
|
|
|
|
} else if (x2 <= x1 + tableWidth && x1 <= x2) {
|
|
|
|
// x2-=14;
|
|
|
|
// x1-=14;
|
|
|
|
} else if (x2 + tableWidth >= x1 && x2 + tableWidth <= x1 + tableWidth) {
|
|
|
|
x1 -= 14;
|
|
|
|
x2 -= 14;
|
|
|
|
} else {
|
|
|
|
x2 -= 14;
|
|
|
|
x1 -= 14;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (x1 + tableWidth <= x2) {
|
|
|
|
x2 -= 14;
|
|
|
|
} else if (x1 + tableWidth >= x2 && x1 + tableWidth <= x2 + tableWidth) {
|
|
|
|
//
|
|
|
|
x1 -= 14;
|
|
|
|
x2 -= 14;
|
|
|
|
} else if (x1 >= x2 && x1 <= x2 + tableWidth) {
|
|
|
|
// x1-=19;
|
|
|
|
// x2-=14;
|
|
|
|
} else {
|
|
|
|
x1 -= 14;
|
|
|
|
x2 -= 14;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
x1 *= zoom;
|
|
|
|
x2 *= zoom;
|
|
|
|
y1 *= zoom;
|
|
|
|
y2 *= zoom;
|
|
|
|
|
|
|
|
let r = 10 * zoom;
|
|
|
|
const offsetX = 8 * zoom;
|
|
|
|
const midX = (x2 + x1 + tableWidth) / 2;
|
|
|
|
const endX = x2 + tableWidth < x1 ? x2 + tableWidth : x2;
|
|
|
|
|
|
|
|
if (Math.abs(y1 - y2) <= 36 * zoom) {
|
|
|
|
r = Math.abs(y2 - y1) / 3;
|
|
|
|
if (r <= 2) {
|
|
|
|
if (x1 + tableWidth <= x2)
|
|
|
|
return `M ${x1 + tableWidth - 2 * offsetX} ${y1} L ${x2} ${y2 + 0.1}`;
|
|
|
|
else if (x2 + tableWidth < x1)
|
|
|
|
return `M ${x1} ${y1} L ${x2 + tableWidth} ${y2 + 0.1}`;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if (y1 <= y2) {
|
|
|
|
if (x1 + tableWidth <= x2) {
|
|
|
|
return `M ${x1 + tableWidth - offsetX * 2} ${y1} L ${
|
|
|
|
midX - r
|
|
|
|
} ${y1} A ${r} ${r} 0 0 1 ${midX} ${y1 + r} L ${midX} ${
|
|
|
|
y2 - r
|
|
|
|
} A ${r} ${r} 0 0 0 ${midX + r} ${y2} L ${endX} ${y2}`;
|
|
|
|
} else if (x2 <= x1 + tableWidth && x1 <= x2) {
|
|
|
|
return `M ${x1 + tableWidth - 2 * offsetX} ${y1} L ${
|
|
|
|
x2 + tableWidth
|
|
|
|
} ${y1} A ${r} ${r} 0 0 1 ${x2 + tableWidth + r} ${y1 + r} L ${
|
|
|
|
x2 + tableWidth + r
|
|
|
|
} ${y2 - r} A ${r} ${r} 0 0 1 ${x2 + tableWidth} ${y2} L ${
|
|
|
|
x2 + tableWidth - 2 * offsetX
|
|
|
|
} ${y2}`;
|
|
|
|
} else if (x2 + tableWidth >= x1 && x2 + tableWidth <= x1 + tableWidth) {
|
|
|
|
return `M ${x1} ${y1} L ${x2 - r} ${y1} A ${r} ${r} 0 0 0 ${x2 - r - r} ${
|
|
|
|
y1 + r
|
|
|
|
} L ${x2 - r - r} ${y2 - r} A ${r} ${r} 0 0 0 ${
|
|
|
|
x2 - r
|
|
|
|
} ${y2} L ${x2} ${y2}`;
|
|
|
|
} else {
|
|
|
|
return `M ${x1} ${y1} L ${midX + r} ${y1} A ${r} ${r} 0 0 0 ${midX} ${
|
|
|
|
y1 + r
|
|
|
|
} L ${midX} ${y2 - r} A ${r} ${r} 0 0 1 ${
|
|
|
|
midX - r
|
|
|
|
} ${y2} L ${endX} ${y2}`;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
if (x1 + tableWidth <= x2) {
|
|
|
|
return `M ${x1 + tableWidth - offsetX * 2} ${y1} L ${
|
|
|
|
midX - r
|
|
|
|
} ${y1} A ${r} ${r} 0 0 0 ${midX} ${y1 - r} L ${midX} ${
|
|
|
|
y2 + r
|
|
|
|
} A ${r} ${r} 0 0 1 ${midX + r} ${y2} L ${endX} ${y2}`;
|
|
|
|
} else if (x1 + tableWidth >= x2 && x1 + tableWidth <= x2 + tableWidth) {
|
|
|
|
return `M ${x1} ${y1} L ${x1 - r - r} ${y1} A ${r} ${r} 0 0 1 ${
|
|
|
|
x1 - r - r - r
|
|
|
|
} ${y1 - r} L ${x1 - r - r - r} ${y2 + r} A ${r} ${r} 0 0 1 ${
|
|
|
|
x1 - r - r
|
|
|
|
} ${y2} L ${endX} ${y2}`;
|
|
|
|
} else if (x1 >= x2 && x1 <= x2 + tableWidth) {
|
|
|
|
return `M ${x1 + tableWidth - 2 * offsetX} ${y1} L ${
|
|
|
|
x1 + tableWidth - 2 * offsetX + r
|
|
|
|
} ${y1} A ${r} ${r} 0 0 0 ${x1 + tableWidth - 2 * offsetX + r + r} ${
|
|
|
|
y1 - r
|
|
|
|
} L ${x1 + tableWidth - 2 * offsetX + r + r} ${
|
|
|
|
y2 + r
|
|
|
|
} A ${r} ${r} 0 0 0 ${x1 + tableWidth - 2 * offsetX + r} ${y2} L ${
|
|
|
|
x2 + tableWidth - 2 * offsetX
|
|
|
|
} ${y2}`;
|
|
|
|
} else {
|
|
|
|
return `M ${x1} ${y1} L ${midX + r} ${y1} A ${r} ${r} 0 0 1 ${midX} ${
|
|
|
|
y1 - r
|
|
|
|
} L ${midX} ${y2 + r} A ${r} ${r} 0 0 0 ${
|
|
|
|
midX - r
|
|
|
|
} ${y2} L ${endX} ${y2}`;
|
|
|
|
}
|
|
|
|
}
|
2024-03-16 02:55:43 +08:00
|
|
|
}
|