Parent epic: #458
Depends on: Slice B
Goal
Edit UVs with move/rotate/scale, snapping, and full undo/redo through the existing UndoManager.
Scope
- Transform shortcuts inside the UV panel:
G = move, R = rotate, S = scale (Blender-convention, since 3D side uses Unity convention Q/W/E/R — these are free in 2D context). Configurable to W/E/R if the user prefers.
- Numeric input during transform: type
0.5<Enter> to scale by 0.5, 90<Enter> to rotate 90°.
- Pivot options: median of selection, individual origins, 2D cursor.
- Snap modes: to grid, to vertex, to texture pixel (when texture preview is on). Hold
Ctrl to invert snap.
- Mirror X / Mirror Y on selection.
- New command class
UVEditCommand in src/commands/. One command per transform (not per vertex — match the EditMeshTopologyCommand precedent).
- Writes through
EditableMesh::setVertexUV. Bumps the EditableMesh revision so the panel and the 3D viewport refresh.
Acceptance Criteria
Effort
~5–6 days.
Parent epic: #458
Depends on: Slice B
Goal
Edit UVs with move/rotate/scale, snapping, and full undo/redo through the existing
UndoManager.Scope
G= move,R= rotate,S= scale (Blender-convention, since 3D side uses Unity conventionQ/W/E/R— these are free in 2D context). Configurable toW/E/Rif the user prefers.0.5<Enter>to scale by 0.5,90<Enter>to rotate 90°.Ctrlto invert snap.UVEditCommandinsrc/commands/. One command per transform (not per vertex — match theEditMeshTopologyCommandprecedent).EditableMesh::setVertexUV. Bumps the EditableMesh revision so the panel and the 3D viewport refresh.Acceptance Criteria
Ctrl+Z/Ctrl+Shift+Zround-trip every operation cleanly.mesh.uv.transformrecorded.Effort
~5–6 days.