perf(line-snap): reuse scene elements while snapping linear points
This commit is contained in:
@@ -322,13 +322,16 @@ export class LinearElementEditor {
|
|||||||
LinearElementEditor._getSnappedPointForLinearElement({
|
LinearElementEditor._getSnappedPointForLinearElement({
|
||||||
app,
|
app,
|
||||||
event,
|
event,
|
||||||
|
elements,
|
||||||
elementsMap,
|
elementsMap,
|
||||||
element,
|
element,
|
||||||
pointIndex: idx,
|
pointIndex: idx,
|
||||||
scenePointerX,
|
scenePointerX,
|
||||||
scenePointerY,
|
scenePointerY,
|
||||||
pointerOffset: linearElementEditor.pointerOffset,
|
pointerOffset: linearElementEditor.pointerOffset,
|
||||||
referencePoint: shouldRotateWithDiscreteAngle(event) ? pivotPoint : null,
|
referencePoint: shouldRotateWithDiscreteAngle(event)
|
||||||
|
? pivotPoint
|
||||||
|
: null,
|
||||||
selectedPointsIndices: [idx],
|
selectedPointsIndices: [idx],
|
||||||
customLineAngle,
|
customLineAngle,
|
||||||
});
|
});
|
||||||
@@ -510,6 +513,7 @@ export class LinearElementEditor {
|
|||||||
LinearElementEditor._getSnappedPointForLinearElement({
|
LinearElementEditor._getSnappedPointForLinearElement({
|
||||||
app,
|
app,
|
||||||
event,
|
event,
|
||||||
|
elements,
|
||||||
elementsMap,
|
elementsMap,
|
||||||
element,
|
element,
|
||||||
pointIndex: lastClickedPoint,
|
pointIndex: lastClickedPoint,
|
||||||
@@ -1209,10 +1213,12 @@ export class LinearElementEditor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const anchor = points[points.length - 2];
|
const anchor = points[points.length - 2];
|
||||||
|
const elements = app.scene.getNonDeletedElements();
|
||||||
const { point: newPoint, snapLines } =
|
const { point: newPoint, snapLines } =
|
||||||
LinearElementEditor._getSnappedPointForLinearElement({
|
LinearElementEditor._getSnappedPointForLinearElement({
|
||||||
app,
|
app,
|
||||||
event,
|
event,
|
||||||
|
elements,
|
||||||
elementsMap,
|
elementsMap,
|
||||||
element,
|
element,
|
||||||
pointIndex: points.length - 1,
|
pointIndex: points.length - 1,
|
||||||
@@ -1887,6 +1893,7 @@ export class LinearElementEditor {
|
|||||||
private static _getSnappedPointForLinearElement({
|
private static _getSnappedPointForLinearElement({
|
||||||
app,
|
app,
|
||||||
event,
|
event,
|
||||||
|
elements,
|
||||||
elementsMap,
|
elementsMap,
|
||||||
element,
|
element,
|
||||||
pointIndex,
|
pointIndex,
|
||||||
@@ -1899,7 +1906,8 @@ export class LinearElementEditor {
|
|||||||
}: {
|
}: {
|
||||||
app: AppClassProperties;
|
app: AppClassProperties;
|
||||||
event: PointerEvent | React.PointerEvent<HTMLCanvasElement>;
|
event: PointerEvent | React.PointerEvent<HTMLCanvasElement>;
|
||||||
elementsMap: ElementsMap;
|
elements: readonly Ordered<NonDeletedExcalidrawElement>[];
|
||||||
|
elementsMap: NonDeletedSceneElementsMap;
|
||||||
element: NonDeleted<ExcalidrawLinearElement>;
|
element: NonDeleted<ExcalidrawLinearElement>;
|
||||||
pointIndex: number;
|
pointIndex: number;
|
||||||
scenePointerX: number;
|
scenePointerX: number;
|
||||||
@@ -1919,12 +1927,17 @@ export class LinearElementEditor {
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (referencePoint) {
|
if (referencePoint) {
|
||||||
const referencePointCoords = LinearElementEditor.getPointGlobalCoordinates(
|
const referencePointCoords =
|
||||||
element,
|
LinearElementEditor.getPointGlobalCoordinates(
|
||||||
referencePoint,
|
element,
|
||||||
elementsMap,
|
referencePoint,
|
||||||
|
elementsMap,
|
||||||
|
);
|
||||||
|
const [gridX, gridY] = getGridPoint(
|
||||||
|
scenePointerX,
|
||||||
|
scenePointerY,
|
||||||
|
gridSize,
|
||||||
);
|
);
|
||||||
const [gridX, gridY] = getGridPoint(scenePointerX, scenePointerY, gridSize);
|
|
||||||
|
|
||||||
let { width: dxFromReference, height: dyFromReference } =
|
let { width: dxFromReference, height: dyFromReference } =
|
||||||
getLockedLinearCursorAlignSize(
|
getLockedLinearCursorAlignSize(
|
||||||
@@ -1942,7 +1955,7 @@ export class LinearElementEditor {
|
|||||||
|
|
||||||
if (!isElbowArrow(element)) {
|
if (!isElbowArrow(element)) {
|
||||||
const { snapOffset, snapLines: nextSnapLines } = snapLinearElementPoint(
|
const { snapOffset, snapLines: nextSnapLines } = snapLinearElementPoint(
|
||||||
app.scene.getNonDeletedElements(),
|
elements,
|
||||||
element,
|
element,
|
||||||
pointFrom<GlobalPoint>(effectiveGridX, effectiveGridY),
|
pointFrom<GlobalPoint>(effectiveGridX, effectiveGridY),
|
||||||
app,
|
app,
|
||||||
@@ -1972,8 +1985,10 @@ export class LinearElementEditor {
|
|||||||
dyFromReference = result.dyFromReference;
|
dyFromReference = result.dyFromReference;
|
||||||
snapLines = result.snapLines;
|
snapLines = result.snapLines;
|
||||||
} else {
|
} else {
|
||||||
dxFromReference = effectiveGridX + snapOffset.x - referencePointCoords[0];
|
dxFromReference =
|
||||||
dyFromReference = effectiveGridY + snapOffset.y - referencePointCoords[1];
|
effectiveGridX + snapOffset.x - referencePointCoords[0];
|
||||||
|
dyFromReference =
|
||||||
|
effectiveGridY + snapOffset.y - referencePointCoords[1];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1985,7 +2000,10 @@ export class LinearElementEditor {
|
|||||||
);
|
);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
point: pointFrom(referencePoint[0] + rotatedX, referencePoint[1] + rotatedY),
|
point: pointFrom(
|
||||||
|
referencePoint[0] + rotatedX,
|
||||||
|
referencePoint[1] + rotatedY,
|
||||||
|
),
|
||||||
snapLines,
|
snapLines,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -1994,7 +2012,7 @@ export class LinearElementEditor {
|
|||||||
const originalPointerY = scenePointerY - pointerOffset.y;
|
const originalPointerY = scenePointerY - pointerOffset.y;
|
||||||
|
|
||||||
const { snapOffset, snapLines } = snapLinearElementPoint(
|
const { snapOffset, snapLines } = snapLinearElementPoint(
|
||||||
app.scene.getNonDeletedElements(),
|
elements,
|
||||||
element,
|
element,
|
||||||
pointFrom(originalPointerX, originalPointerY),
|
pointFrom(originalPointerX, originalPointerY),
|
||||||
app,
|
app,
|
||||||
|
|||||||
Reference in New Issue
Block a user