From e0cfdc52cdbc867e8f0d94fff5e18e3fc4a420ac Mon Sep 17 00:00:00 2001 From: moklick Date: Wed, 14 Aug 2024 16:30:37 +0200 Subject: [PATCH] refactor(xyhandle): cleanup --- packages/system/src/xyhandle/utils.ts | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/packages/system/src/xyhandle/utils.ts b/packages/system/src/xyhandle/utils.ts index bd7c4026..2a0ff911 100644 --- a/packages/system/src/xyhandle/utils.ts +++ b/packages/system/src/xyhandle/utils.ts @@ -3,18 +3,15 @@ import type { HandleType, XYPosition, Handle, InternalNodeBase, NodeLookup } fro function getNodesWithinDistance(position: XYPosition, nodeLookup: NodeLookup, distance: number): InternalNodeBase[] { const nodes: InternalNodeBase[] = []; + const rect = { + x: position.x - distance, + y: position.y - distance, + width: distance * 2, + height: distance * 2, + }; for (const node of nodeLookup.values()) { - const rect = { - x: position.x - distance, - y: position.y - distance, - width: distance * 2, - height: distance * 2, - }; - - const overlappingArea = getOverlappingArea(rect, nodeToRect(node)); - - if (overlappingArea > 0) { + if (getOverlappingArea(rect, nodeToRect(node)) > 0) { nodes.push(node); } } @@ -22,7 +19,10 @@ function getNodesWithinDistance(position: XYPosition, nodeLookup: NodeLookup, di return nodes; } +// this distance is used for the area around the user pointer +// while doing a connection for finding the closest nodes const ADDITIONAL_DISTANCE = 250; + export function getClosestHandle( position: XYPosition, connectionRadius: number, @@ -33,6 +33,7 @@ export function getClosestHandle( let minDistance = Infinity; const closeNodes = getNodesWithinDistance(position, nodeLookup, connectionRadius + ADDITIONAL_DISTANCE); + for (const node of closeNodes) { const allHandles = [...(node.internals.handleBounds?.source ?? []), ...(node.internals.handleBounds?.target ?? [])];