mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
fix: erasing locked elements (#9400)
* fix: erasing locked elements * signature tweaks
This commit is contained in:
parent
58f7d33d80
commit
0cf36d6b30
1 changed files with 13 additions and 9 deletions
|
@ -23,7 +23,7 @@ import type {
|
|||
GlobalPoint,
|
||||
LineSegment,
|
||||
} from "@excalidraw/math/types";
|
||||
import type { ExcalidrawElement } from "@excalidraw/element/types";
|
||||
import type { ElementsMap, ExcalidrawElement } from "@excalidraw/element/types";
|
||||
|
||||
import { AnimatedTrail } from "../animated-trail";
|
||||
|
||||
|
@ -91,7 +91,11 @@ export class EraserTrail extends AnimatedTrail {
|
|||
// take only POINTS_ON_TRAIL points to form some number of segments
|
||||
eraserPath = eraserPath?.slice(eraserPath.length - POINTS_ON_TRAIL);
|
||||
|
||||
const visibleElementsMap = arrayToMap(this.app.visibleElements);
|
||||
const candidateElements = this.app.visibleElements.filter(
|
||||
(el) => !el.locked,
|
||||
);
|
||||
|
||||
const candidateElementsMap = arrayToMap(candidateElements);
|
||||
|
||||
const pathSegments = eraserPath.reduce((acc, point, index) => {
|
||||
if (index === 0) {
|
||||
|
@ -105,7 +109,7 @@ export class EraserTrail extends AnimatedTrail {
|
|||
return [];
|
||||
}
|
||||
|
||||
for (const element of this.app.visibleElements) {
|
||||
for (const element of candidateElements) {
|
||||
// restore only if already added to the to-be-erased set
|
||||
if (restoreToErase && this.elementsToErase.has(element.id)) {
|
||||
const intersects = eraserTest(
|
||||
|
@ -113,7 +117,7 @@ export class EraserTrail extends AnimatedTrail {
|
|||
element,
|
||||
this.segmentsCache,
|
||||
this.geometricShapesCache,
|
||||
visibleElementsMap,
|
||||
candidateElementsMap,
|
||||
this.app,
|
||||
);
|
||||
|
||||
|
@ -151,7 +155,7 @@ export class EraserTrail extends AnimatedTrail {
|
|||
element,
|
||||
this.segmentsCache,
|
||||
this.geometricShapesCache,
|
||||
visibleElementsMap,
|
||||
candidateElementsMap,
|
||||
this.app,
|
||||
);
|
||||
|
||||
|
@ -203,14 +207,14 @@ const eraserTest = (
|
|||
pathSegments: LineSegment<GlobalPoint>[],
|
||||
element: ExcalidrawElement,
|
||||
elementsSegments: ElementsSegmentsMap,
|
||||
shapesCache = new Map<string, GeometricShape<GlobalPoint>>(),
|
||||
visibleElementsMap = new Map<string, ExcalidrawElement>(),
|
||||
shapesCache: Map<string, GeometricShape<GlobalPoint>>,
|
||||
elementsMap: ElementsMap,
|
||||
app: App,
|
||||
): boolean => {
|
||||
let shape = shapesCache.get(element.id);
|
||||
|
||||
if (!shape) {
|
||||
shape = getElementShape<GlobalPoint>(element, visibleElementsMap);
|
||||
shape = getElementShape<GlobalPoint>(element, elementsMap);
|
||||
shapesCache.set(element.id, shape);
|
||||
}
|
||||
|
||||
|
@ -222,7 +226,7 @@ const eraserTest = (
|
|||
let elementSegments = elementsSegments.get(element.id);
|
||||
|
||||
if (!elementSegments) {
|
||||
elementSegments = getElementLineSegments(element, visibleElementsMap);
|
||||
elementSegments = getElementLineSegments(element, elementsMap);
|
||||
elementsSegments.set(element.id, elementSegments);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue