## ADDED Requirements ### Requirement: Frame selected prim with F key The viewport SHALL frame the camera on the bounding box of the currently selected prim when the user presses the F key while the viewport is focused. #### Scenario: Frame a selected mesh prim - **WHEN** the user has a mesh prim selected in the scene hierarchy and presses F while the viewport is focused - **THEN** the camera repositions to frame the bounding box of that prim and all its descendants in world space #### Scenario: Frame with no prim selected - **WHEN** the user presses F with no prim selected - **THEN** no camera movement occurs #### Scenario: Frame in USD camera mode - **WHEN** the viewport is in USD camera mode and the user presses F - **THEN** the viewport switches to free camera mode and frames the selected prim ### Requirement: Frame all with A key The viewport SHALL frame the camera on the bounding box of the entire USD stage when the user presses the A key while the viewport is focused. #### Scenario: Frame all prims in the stage - **WHEN** the user presses A while the viewport is focused and a stage is loaded - **THEN** the camera repositions to frame the bounding box of the entire stage #### Scenario: Frame all with no stage loaded - **WHEN** the user presses A with no stage loaded - **THEN** no camera movement occurs ### Requirement: Selected prim path sourced from SceneHierarchyPanel The viewport SHALL obtain the currently selected prim path from the `SceneHierarchyPanel` via a callback wired by the `Application` class. #### Scenario: Selection change triggers prim path update - **WHEN** the user selects a different prim in the SceneHierarchyPanel - **THEN** the viewport's stored selected prim path updates to reflect the new selection - **AND** pressing F frames the newly selected prim ### Requirement: Bounding box computed via UsdGeomBBoxCache The bounding box for framing a selected prim SHALL be computed using `UsdGeomBBoxCache` to correctly account for transforms, instancing, and purpose. #### Scenario: Bounding box includes descendant geometry - **WHEN** the user frames a prim that has mesh children - **THEN** the bounding box encompasses the prim and all its descendants' geometry in world space