- Add edit-target layer combo at top of Scene Hierarchy panel (always
visible when stage loaded — session, root, sublayers); routes through
LayerManager::SetEditTarget so StageEditor ET checkboxes stay in sync
- Replace custom Create Sublayer modal with native SaveFile dialog;
LayerManager::CreateNewSublayer creates the file on disk, inserts it
at the top of the sublayer stack, and activates it as edit target
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Each panel (Stage Editor, Scene Hierarchy, Viewport, Property Panel,
Timeline) now has a checkable menu item under View. Closing a panel via
its X button also unchecks the entry. Stage Info and Demo Window follow
below a separator.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rotate manipulator — correct axis bug:
- Object-space delta axis was set to initRot.GetRow3(axis) (a parent-space
vector) then applied in the prim's local frame via deltaM * initRot.
These frames are mismatched: the axis must be the canonical e_a so that
Rot(e_a) fixes e_a and the prim rotates purely about its own axis.
Fixed to use the canonical axis for both spaces; only composition order
differs (deltaM * initRot for object, initRot * deltaM for world).
Gizmo pivot placement:
- ComputeGizmoPivot() used the bounding-box centre (geometry centroid),
placing the gizmo at the wrong location for any non-centred prim.
Replaced with parentToWorld.Transform(translate + pivot) from
XformCommonAPI::GetXformVectors — the authored pivot point in world space.
Fallback for incompatible op stacks uses worldMatrix.ExtractTranslation().
Property panel:
- Show pivot (X/Y/Z) as read-only row below Scale, populated from
XformCommonAPI::GetXformVectors each frame.
- Removed active-rotate-axis display (was added and then removed per request).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- SaveStage: explicitly call rootLayer->Save() before m_stage->Save() to
ensure root-layer metadata (subLayers field) is always written to disk
- SaveUsdFile: redirect to SaveAs when the root layer is anonymous so
Ctrl+S on an in-memory stage no longer silently does nothing
- SaveUsdFileAs: call RefreshManagers() after SaveStageAs so LayerManager
stays in sync with the newly opened file-backed stage; without this,
sublayers added after a Save As went to the old stale stage and were lost
- LayerCreateCommand::Execute: use GetSublayers() (sublayer-local indices)
instead of GetLayerStack() (full-stack indices) to record m_insertedIndex,
fixing undo of add-sublayer removing the wrong layer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace LayerPanel with StageEditorPanel for full sublayer composition workflow:
- Edit target (ET) checkbox on root/session and each sublayer; pen icon header
- Dirty indicator (*) per layer; muted layers remain visible in list
- Drag-drop and Move Up/Down reordering with undo (LayerReorderCommand)
- Add existing sublayer via file dialog; create new sublayer modal
- Fixed LayerReorderCommand::ApplyOrder using full-stack indices on sublayer-local
list (silent remove failure → duplicate insert → USD _ValidateEdit error)
- Fixed muted sublayer visibility: walk GetSubLayerPaths() + FindOrOpenRelativeToLayer
+ m_layerRefs to keep muted layers alive and visible
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>