35 lines
2.2 KiB
Markdown
35 lines
2.2 KiB
Markdown
## ADDED Requirements
|
|
|
|
### Requirement: Gizmo drag produces one atomic undo command
|
|
The system SHALL record the pre-drag TRS state when a viewport gizmo drag begins, and push a single `TransformCommand` to `CommandHistory` when the drag ends (mouse button released). The command SHALL store the prim path, the edit-target layer, and the full TRS (translate, rotate, scale) snapshots from before and after the drag.
|
|
|
|
#### Scenario: Single undo reverses entire drag
|
|
- **WHEN** the user drags the Move gizmo to translate a prim and then presses Ctrl+Z
|
|
- **THEN** the prim returns to the position it had before the drag started (not an intermediate position)
|
|
|
|
#### Scenario: Redo restores drag result
|
|
- **WHEN** the user undoes a gizmo drag and then presses Ctrl+Y
|
|
- **THEN** the prim moves back to the post-drag position
|
|
|
|
#### Scenario: No command pushed for zero-delta drag
|
|
- **WHEN** the user clicks a gizmo axis but releases without moving
|
|
- **THEN** no command is pushed to the history stack
|
|
|
|
### Requirement: Property panel TRS commits produce undo commands
|
|
The system SHALL push a `TransformCommand` to `CommandHistory` when a translate, rotate, or scale field in the Property panel loses focus after being edited (`ImGui::IsItemDeactivatedAfterEdit()`). The command SHALL store the pre-edit and post-edit TRS values.
|
|
|
|
#### Scenario: Undo reverts property-panel translate edit
|
|
- **WHEN** the user types a new X translate value in the Property panel, presses Tab to commit, then presses Ctrl+Z
|
|
- **THEN** the prim's translate returns to the value it had before the edit
|
|
|
|
#### Scenario: Typing without committing does not push a command
|
|
- **WHEN** the user begins editing a translate field but presses Escape to cancel
|
|
- **THEN** no new command is added to the undo stack
|
|
|
|
### Requirement: Transform command respects the active edit target layer
|
|
The `TransformCommand` SHALL store and restore the `SdfLayerHandle` that was the active edit target at the time of the edit. `Undo()` and `Redo()` SHALL direct their `UsdGeomXformCommonAPI` writes to that same layer via `UsdEditContext`.
|
|
|
|
#### Scenario: Undo writes to correct layer
|
|
- **WHEN** the user has Layer B selected as the edit target, moves a prim, then undoes
|
|
- **THEN** the revert is written to Layer B, not to the root layer
|