Init Repo
This commit is contained in:
@@ -0,0 +1,30 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Transform manipulator renders only in the focused viewport tile
|
||||
The transform gizmo (manipulator) SHALL render and accept input only in the tile that was most recently clicked. All other tiles SHALL NOT display the gizmo.
|
||||
|
||||
#### Scenario: Focused tile shows gizmo, other tile does not
|
||||
- **WHEN** the user clicks in tile A (making it focused), then selects a prim
|
||||
- **THEN** the transform gizmo appears over the selection in tile A only; tile B shows no gizmo
|
||||
|
||||
#### Scenario: Move focus to another tile
|
||||
- **WHEN** the user clicks in tile B while tile A was focused
|
||||
- **THEN** the gizmo disappears from tile A and appears in tile B over the selection
|
||||
|
||||
### Requirement: Manipulator mode and space are global
|
||||
The manipulator tool mode (Select/Move/Rotate/Scale) and transform space (World/Object) SHALL be global settings shared across all tiles, owned by the `ViewportPanel` container.
|
||||
|
||||
#### Scenario: Change manipulator mode in focused tile
|
||||
- **WHEN** the user presses W (Move) while tile A is focused
|
||||
- **THEN** the mode switches to Move globally, and if the user clicks in tile B, tile B's gizmo is in Move mode
|
||||
|
||||
### Requirement: Keyboard shortcuts route to focused tile
|
||||
Keyboard shortcuts for the manipulator (Q/W/E/R), frame selection (F), frame all (A), and maximize toggle (Space) SHALL only apply to the focused tile.
|
||||
|
||||
#### Scenario: Frames selection in focused tile only
|
||||
- **WHEN** the user presses F while tile A is focused
|
||||
- **THEN** tile A's camera frames the selection; other tiles' cameras remain unchanged
|
||||
|
||||
#### Scenario: Tool shortcut changes global mode
|
||||
- **WHEN** the user presses W while tile A is focused
|
||||
- **THEN** the global manipulator mode changes to Move, and the focused tile (A) shows the Move gizmo if a prim is selected
|
||||
@@ -0,0 +1,30 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Independent camera per viewport tile
|
||||
Each viewport tile SHALL own an independent `ViewportCamera` instance. Camera operations (orbit, pan, dolly, zoom, frame) in one tile SHALL NOT affect any other tile's camera.
|
||||
|
||||
#### Scenario: Orbit in one tile, other tiles unchanged
|
||||
- **WHEN** the user Alt+LMB drags to orbit in tile A
|
||||
- **THEN** tile A's camera rotates, while tiles B, C, D remain at their previous camera positions
|
||||
|
||||
#### Scenario: Frame selection in one tile
|
||||
- **WHEN** the user presses F in a tile
|
||||
- **THEN** that tile's camera frames the current selection, other tiles are unaffected
|
||||
|
||||
### Requirement: Per-tile camera selector dropdown
|
||||
Each tile SHALL have a compact camera selector (icon + dropdown) showing "Free Camera" and all USD camera prims on the stage. Selecting a USD camera in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: Tile A uses Free Camera, Tile B uses a USD camera prim
|
||||
- **WHEN** the user selects a USD camera prim in tile B's camera dropdown
|
||||
- **THEN** tile B switches to USD camera mode and renders from that camera's view, while tile A continues in free camera mode
|
||||
|
||||
#### Scenario: Both tiles use the same USD camera
|
||||
- **WHEN** the user selects the same USD camera prim in both tile A and tile B
|
||||
- **THEN** both tiles render from that camera's view but can navigate independently when one tile goes into free camera mode
|
||||
|
||||
### Requirement: Camera list refreshes on dropdown open
|
||||
Each tile SHALL refresh its camera prim list from the stage whenever its camera dropdown is opened.
|
||||
|
||||
#### Scenario: New camera added, then dropdown opened
|
||||
- **WHEN** the user adds a new UsdGeomCamera prim to the stage and opens a tile's camera dropdown
|
||||
- **THEN** the dropdown includes the newly added camera prim
|
||||
@@ -0,0 +1,43 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Per-tile grid toggle
|
||||
Each viewport tile SHALL have an independent grid visibility setting. Toggling the grid in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: Grid on in Tile A, off in Tile B
|
||||
- **WHEN** the user toggles grid ON in tile A and OFF in tile B
|
||||
- **THEN** tile A shows the ground grid and tile B does not
|
||||
|
||||
### Requirement: Per-tile anti-aliasing toggle
|
||||
Each viewport tile SHALL have an independent line-AA setting. Toggling AA in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: AA on in Tile A, off in Tile B
|
||||
- **WHEN** the user toggles AA ON in tile A and OFF in tile B
|
||||
- **THEN** tile A renders line overlays with GL_LINE_SMOOTH, tile B renders without
|
||||
|
||||
### Requirement: Per-tile background color
|
||||
Each viewport tile SHALL have an independent background color. Changing the background color in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: Two tiles show different background colors
|
||||
- **WHEN** the user sets tile A's background to "Black" and tile B's background to "Dark Gray"
|
||||
- **THEN** tile A renders with a black background and tile B with a dark gray background
|
||||
|
||||
### Requirement: Per-tile bounding box display
|
||||
Each viewport tile SHALL have an independent bounding box display mode (None / Per Object / All Selection). Changing the bbox mode in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: BBox mode differs between tiles
|
||||
- **WHEN** the user sets tile A to "Per Object" bbox mode and tile B to "None"
|
||||
- **THEN** tile A draws bounding boxes on each selected prim, tile B draws none
|
||||
|
||||
### Requirement: Per-tile render delegate
|
||||
Each viewport tile SHALL support an independent render delegate selection. Changing the render delegate in one tile SHALL NOT affect other tiles.
|
||||
|
||||
#### Scenario: Storm in Tile A, HdEmbree in Tile B
|
||||
- **WHEN** the user selects "HdStorm" for tile A and "HdEmbree" for tile B
|
||||
- **THEN** tile A renders via HdStorm and tile B via HdEmbree
|
||||
|
||||
### Requirement: Compact per-tile toolbar
|
||||
Each tile's toolbar SHALL use compact icon-only buttons (16×16) arranged in a single horizontal row above the rendered image, consuming no more than 32px height. Tooltips SHALL be available on hover.
|
||||
|
||||
#### Scenario: Toolbar renders compactly in a small tile
|
||||
- **WHEN** a tile is 300px wide in an HSplit layout
|
||||
- **THEN** the toolbar fits within the tile width without clipping, using a horizontal scroll or overflow dropdown if necessary
|
||||
@@ -0,0 +1,26 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Shared selection across all viewport tiles
|
||||
Selection SHALL be shared across all viewport tiles. When a prim is picked in any tile (single click or rect drag), all tiles SHALL update their selection highlight display to show the same set of selected prims.
|
||||
|
||||
#### Scenario: Pick in Tile A, Tile B shows highlight
|
||||
- **WHEN** the user single-clicks a prim in tile A
|
||||
- **THEN** tile A and tile B both highlight that prim with the selection overlay
|
||||
|
||||
#### Scenario: Rect select in Tile B, Tile A updates
|
||||
- **WHEN** the user rect-drags over multiple prims in tile B
|
||||
- **THEN** both tile A and tile B highlight the same set of prims
|
||||
|
||||
### Requirement: Selection change propagates to SceneHierarchyPanel and PropertyPanel
|
||||
When selection changes via any viewport tile, the `OnPrimPicked` / `OnPrimsPickedRect` callbacks SHALL fire from the `ViewportPanel` container, just as they do today.
|
||||
|
||||
#### Scenario: Pick in viewport updates hierarchy
|
||||
- **WHEN** the user picks a prim in any tile
|
||||
- **THEN** the SceneHierarchyPanel and PropertyPanel update to show the selected prim's properties
|
||||
|
||||
### Requirement: Shift+click additive selection across tiles
|
||||
Shift+click SHALL work consistently across all tiles. Prim picked in any tile is added to or removed from the shared selection set.
|
||||
|
||||
#### Scenario: Shift+click in Tile A, then Tile B
|
||||
- **WHEN** the user selects prim P1 in tile A, then Shift+clicks prim P2 in tile B
|
||||
- **THEN** both P1 and P2 are in the shared selection, highlighted in both tiles
|
||||
@@ -0,0 +1,55 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: Layout presets
|
||||
The viewport container SHALL support switching between four layout presets at any time: Single (1 tile), HSplit (2 tiles side-by-side), VSplit (2 tiles top-bottom), and Quad (4 tiles in a 2×2 grid).
|
||||
|
||||
#### Scenario: Switch layout from Single to HSplit
|
||||
- **WHEN** the user selects "Horizontal Split" from the layout menu
|
||||
- **THEN** the viewport splits into two equal-sized tiles side-by-side
|
||||
|
||||
#### Scenario: Switch layout from HSplit to Single
|
||||
- **WHEN** the user selects "Single" from the layout menu
|
||||
- **THEN** the two tiles merge back into a single tile, and the focused tile's camera/settings are preserved
|
||||
|
||||
#### Scenario: Switch from HSplit to Quad
|
||||
- **WHEN** the user switches from HSplit to Quad
|
||||
- **THEN** four tiles are created in a 2×2 grid, filling the viewport area
|
||||
|
||||
### Requirement: Draggable dividers
|
||||
The divider line between tiles SHALL be draggable to resize adjacent tiles. Dividers SHALL be 6px wide with visual hover feedback.
|
||||
|
||||
#### Scenario: Drag horizontal divider
|
||||
- **WHEN** the user clicks and drags the divider between two tiles
|
||||
- **THEN** the divider follows the mouse, and tiles resize proportionally
|
||||
|
||||
#### Scenario: Drag divider to edge
|
||||
- **WHEN** the user drags a divider to within 10% of the viewport edge
|
||||
- **THEN** the divider snaps back to the 10% boundary to prevent tiles from becoming too small (minimum 100px per dimension)
|
||||
|
||||
### Requirement: Layout applies to the entire viewport area
|
||||
When the layout changes, all tiles SHALL be redistributed to fill the entire available viewport panel content region. No gaps between tiles.
|
||||
|
||||
#### Scenario: Resize main window with Quad layout
|
||||
- **WHEN** the user resizes the main application window
|
||||
- **THEN** all four tiles resize proportionally to maintain their relative sizes and fill the viewport content area
|
||||
|
||||
### Requirement: Space-key maximize restores previous layout
|
||||
When maximized, pressing Space again SHALL restore the exact layout and divider positions from before maximization.
|
||||
|
||||
#### Scenario: Maximize and restore preserves layout
|
||||
- **WHEN** the user has an HSplit layout with divider at 0.3, then hovers tile B and presses Space, then presses Space again
|
||||
- **THEN** the viewport returns to HSplit layout with both tiles visible and the divider at 0.3
|
||||
|
||||
### Requirement: Escape restores maximized viewport
|
||||
When maximized, pressing Escape SHALL restore the previous layout (same behavior as Space toggle).
|
||||
|
||||
#### Scenario: Escape during maximize
|
||||
- **WHEN** the viewport is maximized and the user presses Escape
|
||||
- **THEN** the previous multi-tile layout is restored
|
||||
|
||||
### Requirement: Space requires tile hover in multi-tile layouts
|
||||
In Single layout (only 1 tile), Space SHALL be a no-op — there is nothing to maximize.
|
||||
|
||||
#### Scenario: Space ignored in Single layout
|
||||
- **WHEN** the viewport is already in Single layout and the user presses Space
|
||||
- **THEN** the viewport remains unchanged in Single layout
|
||||
Reference in New Issue
Block a user