Update box brush UVs handling and add error checking

This commit is contained in:
2026-04-15 07:52:07 +02:00
parent 4d56cbc1dd
commit f3fac459ad

View File

@@ -3,6 +3,7 @@ import { createOpaqueId } from "../core/ids";
import type { EditorSelection } from "../core/selection"; import type { EditorSelection } from "../core/selection";
import { import {
cloneFaceUvState, cloneFaceUvState,
updateBrush,
type FaceUvState, type FaceUvState,
type WhiteboxFaceId type WhiteboxFaceId
} from "../document/brushes"; } from "../document/brushes";
@@ -39,7 +40,7 @@ export function createUpdateBoxBrushAllFaceUvsCommand(
previousUvStates = Object.fromEntries( previousUvStates = Object.fromEntries(
getBrushFaceIds(currentBrush).map((faceId) => [ getBrushFaceIds(currentBrush).map((faceId) => [
faceId, faceId,
cloneFaceUvState(currentBrush.faces[faceId].uv) cloneFaceUvState(currentBrush.faces[faceId]?.uv)
]) ])
); );
} }
@@ -53,20 +54,22 @@ export function createUpdateBoxBrushAllFaceUvsCommand(
} }
context.setDocument( context.setDocument(
replaceBrush(currentDocument, { replaceBrush(
...currentBrush, currentDocument,
faces: Object.fromEntries( updateBrush(currentBrush, {
getBrushFaceIds(currentBrush).map((faceId) => [ faces: Object.fromEntries(
faceId, getBrushFaceIds(currentBrush).map((faceId) => [
{ faceId,
...currentBrush.faces[faceId], {
uv: cloneFaceUvState( ...currentBrush.faces[faceId],
options.updateUvState(currentBrush.faces[faceId].uv, faceId) uv: cloneFaceUvState(
) options.updateUvState(currentBrush.faces[faceId].uv, faceId)
} )
]) }
) as typeof currentBrush.faces ])
}) ) as typeof currentBrush.faces
})
)
); );
context.setToolMode("select"); context.setToolMode("select");
}, },
@@ -77,20 +80,23 @@ export function createUpdateBoxBrushAllFaceUvsCommand(
const currentDocument = context.getDocument(); const currentDocument = context.getDocument();
const currentBrush = getBoxBrushOrThrow(currentDocument, options.brushId); const currentBrush = getBoxBrushOrThrow(currentDocument, options.brushId);
const restoredUvStates = previousUvStates;
context.setDocument( context.setDocument(
replaceBrush(currentDocument, { replaceBrush(
...currentBrush, currentDocument,
faces: Object.fromEntries( updateBrush(currentBrush, {
getBrushFaceIds(currentBrush).map((faceId) => [ faces: Object.fromEntries(
faceId, getBrushFaceIds(currentBrush).map((faceId) => [
{ faceId,
...currentBrush.faces[faceId], {
uv: cloneFaceUvState(previousUvStates[faceId]) ...currentBrush.faces[faceId],
} uv: cloneFaceUvState(restoredUvStates[faceId])
]) }
) as typeof currentBrush.faces ])
}) ) as typeof currentBrush.faces
})
)
); );
if (previousSelection !== null) { if (previousSelection !== null) {