refactor(snapping): clarify linear point reference options

This commit is contained in:
Ryan Di
2026-04-28 16:16:10 +10:00
parent 702e029755
commit 79beed3f5c
2 changed files with 15 additions and 14 deletions
+3 -2
View File
@@ -1913,8 +1913,9 @@ export class LinearElementEditor {
event,
elementsMap,
{
includeSelfPoints: true,
selectedPointsIndices,
selfReferencePoints: {
excludedPointIndices: selectedPointsIndices,
},
},
);
+12 -12
View File
@@ -654,19 +654,20 @@ export const getReferenceSnapPoints = (
.flatMap((elementGroup) => getElementsCorners(elementGroup, elementsMap));
};
type LinearElementPointReferencePointsOptions = {
selfReferencePoints?: {
excludedPointIndices?: readonly number[];
};
};
export const getReferenceSnapPointsForLinearElementPoint = (
elements: readonly NonDeletedExcalidrawElement[],
editingElement: ExcalidrawLinearElement,
editingPointIndex: number,
appState: AppState,
elementsMap: ElementsMap,
options: {
includeSelfPoints?: boolean;
selectedPointsIndices?: readonly number[];
} = {},
options: LinearElementPointReferencePointsOptions = {},
) => {
const { includeSelfPoints = false } = options;
// Get all reference elements (excluding the one being edited)
const referenceElements = getReferenceElements(
elements,
@@ -691,12 +692,14 @@ export const getReferenceSnapPointsForLinearElementPoint = (
}
// Include other points from the same linear element when creating new points or in editing mode
if (includeSelfPoints) {
if (options.selfReferencePoints) {
const excludedPointIndices =
options.selfReferencePoints.excludedPointIndices ?? [editingPointIndex];
const elementPoints = LinearElementEditor.getPointsGlobalCoordinates(
editingElement as NonDeleted<ExcalidrawLinearElement>,
elementsMap,
{
excludePointsIndices: options.selectedPointsIndices,
excludePointsIndices: excludedPointIndices,
},
);
allSnapPoints.push(...elementPoints);
@@ -713,10 +716,7 @@ export const snapLinearElementPoint = (
app: AppClassProperties,
event: KeyboardModifiersObject,
elementsMap: ElementsMap,
options: {
includeSelfPoints?: boolean;
selectedPointsIndices?: readonly number[];
} = {},
options: LinearElementPointReferencePointsOptions = {},
) => {
if (
!isSnappingEnabled({ app, event, selectedElements: [editingElement] }) ||