mirror of
https://github.com/storytold/effectcraft.git
synced 2026-10-29 20:47:18 -06:00
#670: each pane of a 2- or 4-view layout chooses its own view
Problem: the extra panes of View > Switch View Layout were fixed to Top, Front and Right, and the 3D View menu only changed the main view.
Fix: every extra pane has a view selector (Active Camera, Default, Front, Left, Top, Back, Right, Bottom, Custom View 1-3). The choice is kept per comp in Views3D::panes (serde default, so older editor states load with Top/Front/Right) and set by the new command view.setPaneView {pane 0-3, view}. The Active Camera pane renders through the comp camera.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 5.5
parent
f19f3a8a39
commit
fa7ffb6d09
@@ -457,9 +457,29 @@ pub struct Views3D {
|
||||
/// Edited view cameras (views not present use their defaults).
|
||||
#[serde(default)]
|
||||
pub cams: BTreeMap<View3D, ViewCam>,
|
||||
/// The views of the extra panes of a 2- or 4-view layout (pane 1 to 3, i.e. index 0 to 2);
|
||||
/// panes not present show their default ([`Views3D::DEFAULT_PANES`]).
|
||||
#[serde(default)]
|
||||
pub panes: Vec<View3D>,
|
||||
}
|
||||
|
||||
impl Views3D {
|
||||
/// Views the extra panes of a multi-view layout start with: Top, Front and Right.
|
||||
pub const DEFAULT_PANES: [View3D; 3] = [View3D::Top, View3D::Front, View3D::Right];
|
||||
/// The view of extra pane `i` (0 = the first beside the main view).
|
||||
pub fn pane(&self, i: usize) -> View3D {
|
||||
self.panes.get(i).or_else(|| Self::DEFAULT_PANES.get(i)).copied().unwrap_or_default()
|
||||
}
|
||||
/// Choose the view of extra pane `i` (ignored past the third).
|
||||
pub fn set_pane(&mut self, i: usize, v: View3D) {
|
||||
if i >= Self::DEFAULT_PANES.len() {
|
||||
return;
|
||||
}
|
||||
while self.panes.len() <= i {
|
||||
self.panes.push(Self::DEFAULT_PANES[self.panes.len()]);
|
||||
}
|
||||
self.panes[i] = v;
|
||||
}
|
||||
pub fn cam(&self, v: View3D, w: f64, h: f64) -> ViewCam {
|
||||
self.cams.get(&v).copied().unwrap_or_else(|| default_view_cam(v, w, h))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user