diff --git a/packages/editor/src/components/tools/item/use-placement-coordinator.tsx b/packages/editor/src/components/tools/item/use-placement-coordinator.tsx index cdc502f2..83ddcfad 100644 --- a/packages/editor/src/components/tools/item/use-placement-coordinator.tsx +++ b/packages/editor/src/components/tools/item/use-placement-coordinator.tsx @@ -610,10 +610,10 @@ export function usePlacementCoordinator(config: PlacementCoordinatorConfig): Rea } // Floor grab-offset: the item tracks the grabbed point instead of snapping - // its origin under the cursor. `floorStrategy.move` snaps on the WORLD grid - // (`event.position`) on its default path and only reads `event.localPosition` - // under Alt (free place), so both frames must carry the offset; the world - // point is derived from the corrected local one so the two stay consistent. + // its origin under the cursor. The offset is computed in building-local space + // (`event.localPosition`), but `floorStrategy.move` snaps on the WORLD grid + // (`event.position`), so the corrected local point is re-projected to a + // corrected world point and both frames carry the offset to stay consistent. const applyFloorGrabOffset = (event: GridEvent): GridEvent => { if (relativeFloorStart === null) return event const rawX = event.localPosition[0]