need this file for transform handles too

This commit is contained in:
Skyler Lehmkuhl 2024-12-22 06:55:55 -05:00
parent b94d73c976
commit e54d897697
1 changed files with 38 additions and 1 deletions

View File

@ -622,6 +622,42 @@ function deepMerge(target, source) {
return target; return target;
} }
function getPointNearBox(boundingBox, point, threshold = 5, checkCenters = true) {
const { x: { min: xMin, max: xMax }, y: { min: yMin, max: yMax } } = boundingBox;
const { x, y } = point;
// List of points to check (corners and centers of sides) with their names
const pointsToCheck = [
{ name: 'nw', x: xMin, y: yMin }, // top-left corner
{ name: 'ne', x: xMax, y: yMin }, // top-right corner
{ name: 'sw', x: xMin, y: yMax }, // bottom-left corner
{ name: 'se', x: xMax, y: yMax }, // bottom-right corner
];
// Optionally add the center points if checkCenters is true
if (checkCenters) {
pointsToCheck.push(
{ name: 'n', x: (xMin + xMax) / 2, y: yMin }, // center of top side
{ name: 's', x: (xMin + xMax) / 2, y: yMax }, // center of bottom side
{ name: 'w', x: xMin, y: (yMin + yMax) / 2 }, // center of left side
{ name: 'e', x: xMax, y: (yMin + yMax) / 2 } // center of right side
);
}
// Check if the point is within the threshold distance of any of the points
for (let i = 0; i < pointsToCheck.length; i++) {
const pt = pointsToCheck[i];
const manhattanDistance = Math.abs(pt.x - x) + Math.abs(pt.y - y);
if (manhattanDistance <= threshold) {
return pt.name; // Return the name of the point that is close to the input point
}
}
return null; // Point is not within the threshold distance of any relevant point
}
export { export {
titleCase, titleCase,
getMousePositionFraction, getMousePositionFraction,
@ -643,5 +679,6 @@ export {
drawBorderedRect, drawBorderedRect,
drawCenteredText, drawCenteredText,
drawHorizontallyCenteredText, drawHorizontallyCenteredText,
deepMerge deepMerge,
getPointNearBox
}; };