Co-authored-by: Reifonas <211114984+Reifonas@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot]
2026-05-21 12:55:02 +00:00
parent aca11bcdc3
commit 2693eb1da4
+19
View File
@@ -316,3 +316,22 @@ function pointToSegmentDist(px: number, py: number, ax: number, ay: number, bx:
const closestY = ay + t * dy; const closestY = ay + t * dy;
return Math.sqrt((px - closestX) ** 2 + (py - closestY) ** 2); return Math.sqrt((px - closestX) ** 2 + (py - closestY) ** 2);
} }
/**
* Combined snap resolver: tries vertex first, then edge midpoint,
* falling back to the raw hit point. Returns { point, type }.
*/
export function resolveSnap(
mesh: THREE.Mesh,
hitPoint: THREE.Vector3,
camera: THREE.Camera,
canvasSize: { width: number; height: number },
vertexThresholdPx: number = 12,
edgeThresholdPx: number = 16
): { point: THREE.Vector3; type: 'vertex' | 'edge' | 'surface' } {
const v = findNearestVertex(mesh, hitPoint, camera, canvasSize, vertexThresholdPx);
if (v) return { point: v, type: 'vertex' };
const e = findNearestEdgeSegment(mesh, hitPoint, camera, canvasSize, edgeThresholdPx);
if (e) return { point: e.midpoint, type: 'edge' };
return { point: hitPoint.clone(), type: 'surface' };
}