diff --git a/src/commands/resize-box-brush-command.js b/src/commands/resize-box-brush-command.js index 73e4dd64..58a86aad 100644 --- a/src/commands/resize-box-brush-command.js +++ b/src/commands/resize-box-brush-command.js @@ -4,6 +4,7 @@ import { cloneSelectionForCommand, getBoxBrushOrThrow, replaceBrush, setSingleBr export function createResizeBoxBrushCommand(options) { const resolvedSize = options.snapToGrid === false ? options.size : snapPositiveSizeToGrid(options.size, options.gridSize ?? DEFAULT_GRID_SIZE); let previousSize = null; + let previousGeometry = null; let previousSelection = null; let previousToolMode = null; return { @@ -16,6 +17,7 @@ export function createResizeBoxBrushCommand(options) { previousSize = { ...brush.size }; + previousGeometry = cloneBoxBrushGeometry(brush.geometry); } if (previousSelection === null) { previousSelection = cloneSelectionForCommand(context.getSelection()); @@ -23,17 +25,19 @@ export function createResizeBoxBrushCommand(options) { if (previousToolMode === null) { previousToolMode = context.getToolMode(); } + const nextGeometry = scaleBoxBrushGeometryToSize(brush.geometry, resolvedSize); context.setDocument(replaceBrush(currentDocument, { ...brush, size: { ...resolvedSize - } + }, + geometry: nextGeometry })); context.setSelection(setSingleBrushSelection(options.brushId)); context.setToolMode("select"); }, undo(context) { - if (previousSize === null) { + if (previousSize === null || previousGeometry === null) { return; } const currentDocument = context.getDocument(); @@ -42,7 +46,8 @@ export function createResizeBoxBrushCommand(options) { ...brush, size: { ...previousSize - } + }, + geometry: cloneBoxBrushGeometry(previousGeometry) })); if (previousSelection !== null) { context.setSelection(previousSelection); diff --git a/src/commands/resize-box-brush-command.ts b/src/commands/resize-box-brush-command.ts index 3405556b..0a6e4883 100644 --- a/src/commands/resize-box-brush-command.ts +++ b/src/commands/resize-box-brush-command.ts @@ -21,6 +21,7 @@ export function createResizeBoxBrushCommand(options: ResizeBoxBrushCommandOption options.snapToGrid === false ? options.size : snapPositiveSizeToGrid(options.size, options.gridSize ?? DEFAULT_GRID_SIZE); let previousSize: Vec3 | null = null; + let previousGeometry: ReturnType | null = null; let previousSelection: EditorSelection | null = null; let previousToolMode: ToolMode | null = null; @@ -35,6 +36,7 @@ export function createResizeBoxBrushCommand(options: ResizeBoxBrushCommandOption previousSize = { ...brush.size }; + previousGeometry = cloneBoxBrushGeometry(brush.geometry); } if (previousSelection === null) { @@ -45,19 +47,22 @@ export function createResizeBoxBrushCommand(options: ResizeBoxBrushCommandOption previousToolMode = context.getToolMode(); } + const nextGeometry = scaleBoxBrushGeometryToSize(brush.geometry, resolvedSize); + context.setDocument( replaceBrush(currentDocument, { ...brush, size: { ...resolvedSize - } + }, + geometry: nextGeometry }) ); context.setSelection(setSingleBrushSelection(options.brushId)); context.setToolMode("select"); }, undo(context) { - if (previousSize === null) { + if (previousSize === null || previousGeometry === null) { return; } @@ -69,7 +74,8 @@ export function createResizeBoxBrushCommand(options: ResizeBoxBrushCommandOption ...brush, size: { ...previousSize - } + }, + geometry: cloneBoxBrushGeometry(previousGeometry) }) ); diff --git a/src/commands/set-box-brush-transform-command.js b/src/commands/set-box-brush-transform-command.js index 05318197..e18f3372 100644 --- a/src/commands/set-box-brush-transform-command.js +++ b/src/commands/set-box-brush-transform-command.js @@ -46,7 +46,8 @@ export function createSetBoxBrushTransformCommand(options) { previousSnapshot = { center: cloneVec3(brush.center), rotationDegrees: cloneVec3(brush.rotationDegrees), - size: cloneVec3(brush.size) + size: cloneVec3(brush.size), + geometry: cloneBoxBrushGeometry(brush.geometry) }; } if (previousSelection === null) { @@ -55,11 +56,13 @@ export function createSetBoxBrushTransformCommand(options) { if (previousToolMode === null) { previousToolMode = context.getToolMode(); } + const nextGeometry = scaleBoxBrushGeometryToSize(brush.geometry, options.size); context.setDocument(replaceBrush(currentDocument, { ...brush, center: cloneVec3(options.center), rotationDegrees: cloneVec3(options.rotationDegrees), - size: cloneVec3(options.size) + size: cloneVec3(options.size), + geometry: nextGeometry })); context.setSelection(selectionToEditorSelection(options.selection)); context.setToolMode("select"); @@ -75,7 +78,8 @@ export function createSetBoxBrushTransformCommand(options) { ...brush, center: cloneVec3(previousSnapshot.center), rotationDegrees: cloneVec3(previousSnapshot.rotationDegrees), - size: cloneVec3(previousSnapshot.size) + size: cloneVec3(previousSnapshot.size), + geometry: cloneBoxBrushGeometry(previousSnapshot.geometry) })); if (previousSelection !== null) { context.setSelection(previousSelection); diff --git a/src/commands/set-box-brush-transform-command.ts b/src/commands/set-box-brush-transform-command.ts index 724bea26..4dcfd770 100644 --- a/src/commands/set-box-brush-transform-command.ts +++ b/src/commands/set-box-brush-transform-command.ts @@ -34,6 +34,7 @@ interface BrushTransformSnapshot { center: Vec3; rotationDegrees: Vec3; size: Vec3; + geometry: ReturnType; } function cloneVec3(vector: Vec3): Vec3 { @@ -90,7 +91,8 @@ export function createSetBoxBrushTransformCommand(options: SetBoxBrushTransformC previousSnapshot = { center: cloneVec3(brush.center), rotationDegrees: cloneVec3(brush.rotationDegrees), - size: cloneVec3(brush.size) + size: cloneVec3(brush.size), + geometry: cloneBoxBrushGeometry(brush.geometry) }; } @@ -102,12 +104,15 @@ export function createSetBoxBrushTransformCommand(options: SetBoxBrushTransformC previousToolMode = context.getToolMode(); } + const nextGeometry = scaleBoxBrushGeometryToSize(brush.geometry, options.size); + context.setDocument( replaceBrush(currentDocument, { ...brush, center: cloneVec3(options.center), rotationDegrees: cloneVec3(options.rotationDegrees), - size: cloneVec3(options.size) + size: cloneVec3(options.size), + geometry: nextGeometry }) ); context.setSelection(selectionToEditorSelection(options.selection)); @@ -127,7 +132,8 @@ export function createSetBoxBrushTransformCommand(options: SetBoxBrushTransformC ...brush, center: cloneVec3(previousSnapshot.center), rotationDegrees: cloneVec3(previousSnapshot.rotationDegrees), - size: cloneVec3(previousSnapshot.size) + size: cloneVec3(previousSnapshot.size), + geometry: cloneBoxBrushGeometry(previousSnapshot.geometry) }) );