Handle curve selections properly for overlapping shapes
This commit is contained in:
parent
75884e0d7d
commit
78f03c2a12
17
src/main.js
17
src/main.js
|
|
@ -303,28 +303,30 @@ function setProperty(context, path, value) {
|
|||
|
||||
function selectCurve(context, mouse) {
|
||||
let mouseTolerance = 15;
|
||||
let closestDist = mouseTolerance;
|
||||
let closestCurve = undefined
|
||||
let closestShape = undefined
|
||||
for (let shape of context.activeObject.currentFrame.shapes) {
|
||||
if (mouse.x > shape.boundingBox.x.min - mouseTolerance &&
|
||||
mouse.x < shape.boundingBox.x.max + mouseTolerance &&
|
||||
mouse.y > shape.boundingBox.y.min - mouseTolerance &&
|
||||
mouse.y < shape.boundingBox.y.max + mouseTolerance) {
|
||||
let closestDist = mouseTolerance;
|
||||
let closest = undefined
|
||||
for (let curve of shape.curves) {
|
||||
let dist = vectorDist(mouse, curve.project(mouse))
|
||||
if (dist <= closestDist ) {
|
||||
closestDist = dist
|
||||
closest = curve
|
||||
closestCurve = curve
|
||||
closestShape = shape
|
||||
}
|
||||
}
|
||||
if (closest) {
|
||||
return {curve:closest, shape:shape}
|
||||
}
|
||||
}
|
||||
if (closestCurve) {
|
||||
return {curve:closestCurve, shape:closestShape}
|
||||
} else {
|
||||
return undefined
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function moldCurve(curve, mouse, oldmouse) {
|
||||
let diff = {x: mouse.x - oldmouse.x, y: mouse.y - oldmouse.y}
|
||||
|
|
@ -1108,6 +1110,7 @@ function stage() {
|
|||
}
|
||||
} else {
|
||||
let selection = selectCurve(context, mouse)
|
||||
console.log(selection)
|
||||
if (selection) {
|
||||
context.activeCurve = {
|
||||
current: selection.curve,
|
||||
|
|
|
|||
Loading…
Reference in New Issue