From fb8da5f531b6d16715b6039f7e40043d6db5b856 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Wed, 15 Apr 2026 14:41:58 +0200 Subject: [PATCH] Add support for 'brushes', 'modelInstances', and 'entities' in transform session comparison --- src/core/transform-session.ts | 57 +++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) diff --git a/src/core/transform-session.ts b/src/core/transform-session.ts index f6172385..92a109fe 100644 --- a/src/core/transform-session.ts +++ b/src/core/transform-session.ts @@ -1032,6 +1032,26 @@ export function doesTransformSessionChangeTarget( session.target.initialGeometry )) ); + case "brushes": + return ( + session.preview.kind === "brushes" && + (!areVec3Equal(session.preview.pivot, session.target.initialPivot) || + session.preview.items.length !== session.target.items.length || + session.preview.items.some((item, index) => { + const targetItem = session.target.items[index]; + + return ( + item.brushId !== targetItem.brushId || + !areVec3Equal(item.center, targetItem.initialCenter) || + !areVec3Equal( + item.rotationDegrees, + targetItem.initialRotationDegrees + ) || + !areVec3Equal(item.size, targetItem.initialSize) || + !areBrushGeometriesEqual(item.geometry, targetItem.initialGeometry) + ); + })) + ); case "modelInstance": return ( session.preview.kind === "modelInstance" && @@ -1045,6 +1065,25 @@ export function doesTransformSessionChangeTarget( ) || !areVec3Equal(session.preview.scale, session.target.initialScale)) ); + case "modelInstances": + return ( + session.preview.kind === "modelInstances" && + (!areVec3Equal(session.preview.pivot, session.target.initialPivot) || + session.preview.items.length !== session.target.items.length || + session.preview.items.some((item, index) => { + const targetItem = session.target.items[index]; + + return ( + item.modelInstanceId !== targetItem.modelInstanceId || + !areVec3Equal(item.position, targetItem.initialPosition) || + !areVec3Equal( + item.rotationDegrees, + targetItem.initialRotationDegrees + ) || + !areVec3Equal(item.scale, targetItem.initialScale) + ); + })) + ); case "pathPoint": return ( session.preview.kind === "pathPoint" && @@ -1065,6 +1104,24 @@ export function doesTransformSessionChangeTarget( session.target.initialRotation )) ); + case "entities": + return ( + session.preview.kind === "entities" && + (!areVec3Equal(session.preview.pivot, session.target.initialPivot) || + session.preview.items.length !== session.target.items.length || + session.preview.items.some((item, index) => { + const targetItem = session.target.items[index]; + + return ( + item.entityId !== targetItem.entityId || + !areVec3Equal(item.position, targetItem.initialPosition) || + !areEntityTransformRotationsEqual( + item.rotation, + targetItem.initialRotation + ) + ); + })) + ); } }