Handle curve selections properly for overlapping shapes

This commit is contained in:
Skyler Lehmkuhl 2024-11-20 10:33:17 -05:00
parent 75884e0d7d
commit 78f03c2a12
1 changed files with 52 additions and 49 deletions

View File

@ -303,28 +303,30 @@ function setProperty(context, path, value) {
function selectCurve(context, mouse) { function selectCurve(context, mouse) {
let mouseTolerance = 15; let mouseTolerance = 15;
let closestDist = mouseTolerance;
let closestCurve = undefined
let closestShape = undefined
for (let shape of context.activeObject.currentFrame.shapes) { for (let shape of context.activeObject.currentFrame.shapes) {
if (mouse.x > shape.boundingBox.x.min - mouseTolerance && if (mouse.x > shape.boundingBox.x.min - mouseTolerance &&
mouse.x < shape.boundingBox.x.max + mouseTolerance && mouse.x < shape.boundingBox.x.max + mouseTolerance &&
mouse.y > shape.boundingBox.y.min - mouseTolerance && mouse.y > shape.boundingBox.y.min - mouseTolerance &&
mouse.y < shape.boundingBox.y.max + mouseTolerance) { mouse.y < shape.boundingBox.y.max + mouseTolerance) {
let closestDist = mouseTolerance;
let closest = undefined
for (let curve of shape.curves) { for (let curve of shape.curves) {
let dist = vectorDist(mouse, curve.project(mouse)) let dist = vectorDist(mouse, curve.project(mouse))
if (dist <= closestDist ) { if (dist <= closestDist ) {
closestDist = dist closestDist = dist
closest = curve closestCurve = curve
closestShape = shape
} }
} }
if (closest) { }
return {curve:closest, shape:shape} }
if (closestCurve) {
return {curve:closestCurve, shape:closestShape}
} else { } else {
return undefined return undefined
} }
} }
}
}
function moldCurve(curve, mouse, oldmouse) { function moldCurve(curve, mouse, oldmouse) {
let diff = {x: mouse.x - oldmouse.x, y: mouse.y - oldmouse.y} let diff = {x: mouse.x - oldmouse.x, y: mouse.y - oldmouse.y}
@ -1108,6 +1110,7 @@ function stage() {
} }
} else { } else {
let selection = selectCurve(context, mouse) let selection = selectCurve(context, mouse)
console.log(selection)
if (selection) { if (selection) {
context.activeCurve = { context.activeCurve = {
current: selection.curve, current: selection.curve,