in packages/shared/src/coordinate.ts [283:341]
export function calcRectByStartEndPoint(
startPoint: IPoint,
endPoint: IPoint,
scrollX = 0,
scrollY = 0
) {
let drawStartX = 0,
drawStartY = 0
if (
endPoint.x + scrollX >= startPoint.x &&
endPoint.y + scrollY >= startPoint.y
) {
//4象限
drawStartX = startPoint.x
drawStartY = startPoint.y
return new Rect(
drawStartX - scrollX,
drawStartY - scrollY,
Math.abs(endPoint.x - startPoint.x + scrollX),
Math.abs(endPoint.y - startPoint.y + scrollY)
)
} else if (
endPoint.x + scrollX < startPoint.x &&
endPoint.y + scrollY < startPoint.y
) {
//1象限
drawStartX = endPoint.x
drawStartY = endPoint.y
return new Rect(
drawStartX,
drawStartY,
Math.abs(endPoint.x - startPoint.x + scrollX),
Math.abs(endPoint.y - startPoint.y + scrollY)
)
} else if (
endPoint.x + scrollX < startPoint.x &&
endPoint.y + scrollY >= startPoint.y
) {
//3象限
drawStartX = endPoint.x
drawStartY = startPoint.y
return new Rect(
drawStartX - scrollX,
drawStartY - scrollY,
Math.abs(endPoint.x - startPoint.x + scrollX),
Math.abs(endPoint.y - startPoint.y + scrollY)
)
} else {
//2象限
drawStartX = startPoint.x
drawStartY = endPoint.y
return new Rect(
drawStartX,
drawStartY,
Math.abs(endPoint.x - startPoint.x + scrollX),
Math.abs(endPoint.y - startPoint.y + scrollY)
)
}
}