graphic design tool
git clone https://git.lucas.co/cce-designer.git
feat: Reference Cube and Origin Axes toggles move to the Guides node
Same migration as the grid toggle: older saves' Main-node values seed
the Guides copies, Main's rows retire from the Viewport menu section,
and the settings-apply + live-toggle-refresh paths follow.
Co-Authored-By: Claude Fable 5 <[email protected]>
src/app.rs | 8 +++++---
src/project.rs | 44 ++++++++++++++++++++++++++------------------
2 files changed, 31 insertions(+), 21 deletions(-)
diff --git a/src/app.rs b/src/app.rs
index bddd3d7..6626583 100644
--- a/src/app.rs
+++ b/src/app.rs
@@ -1867,18 +1867,20 @@ impl State {
}
fn refresh_main_node_live_toggles(&mut self, slot_idx: usize) {
- let live_main: [(&str, bool); 9] = [
+ let live_main: [(&str, bool); 7] = [
("Show Network Pane", self.show_network),
("Show Viewport Pane", self.show_viewport),
("Show Parameters Pane", self.show_parameters),
("Show Spreadsheet Pane", self.show_spreadsheet),
("Show Playbar Pane", self.show_playbar),
("Circular Pane", self.circular_network_pane),
+ ("Ray Traced Preview", self.viewport().rt_mode),
+ ];
+ let live_guides: [(&str, bool); 3] = [
+ ("Show Grid Guide", self.viewport().show_grid),
("Show Reference Cube", self.viewport().show_cube),
("Show Origin Axes", self.viewport().show_origin),
- ("Ray Traced Preview", self.viewport().rt_mode),
];
- let live_guides: [(&str, bool); 1] = [("Show Grid Guide", self.viewport().show_grid)];
let dir = self.current_dir_mut();
let Some(child) = dir.children.get_mut(slot_idx) else { return };
let live: &[(&str, bool)] = match child.name.as_str() {
diff --git a/src/project.rs b/src/project.rs
index 2659706..b3cf397 100644
--- a/src/project.rs
+++ b/src/project.rs
@@ -422,8 +422,6 @@ impl State {
ensure_param(main_node, "Active Camera", "choice", &self.active_camera, &camera_options_refs, None, None, None);
}
- ensure_param(main_node, "Show Reference Cube", "toggle", bool_str(vp_show_cube), &[], None, None, None);
- ensure_param(main_node, "Show Origin Axes", "toggle", bool_str(vp_show_origin), &[], None, None, None);
ensure_param(main_node, "Ray Traced Preview", "toggle", bool_str(vp_rt_mode), &[], None, None, None);
ensure_param(main_node, "Grid Thickness", "spinbox", &((self.grid_thickness * 1000.0) as i32).to_string(), &[], Some(2.0), Some(200.0), Some(1.0));
ensure_param(main_node, "Origin Guide Size", "spinbox", &((self.origin_size * 10.0) as i32).to_string(), &[], Some(1.0), Some(50.0), Some(1.0));
@@ -461,12 +459,20 @@ impl State {
// dispatched. Drop it from older saves too.
main_node.params.retain(|p| !matches!(p.name.as_str(), "Help" | "About"));
- // The grid toggle moved to the Guides utility node: retire Main's
- // copy, keeping an older save's value as the seed.
+ // The viewport guide toggles moved to the Guides utility node: retire
+ // Main's copies, keeping an older save's values as the seeds.
let migrated_grid = main_node.params.iter()
.find(|p| p.name == "Show Grid Guide")
.and_then(|p| p.default.parse::<bool>().ok());
- main_node.params.retain(|p| p.name != "Show Grid Guide");
+ let migrated_cube = main_node.params.iter()
+ .find(|p| p.name == "Show Reference Cube")
+ .and_then(|p| p.default.parse::<bool>().ok());
+ let migrated_origin = main_node.params.iter()
+ .find(|p| p.name == "Show Origin Axes")
+ .and_then(|p| p.default.parse::<bool>().ok());
+ main_node.params.retain(|p| {
+ !matches!(p.name.as_str(), "Show Grid Guide" | "Show Reference Cube" | "Show Origin Axes")
+ });
// Square Aspect / Show Camera Pivot moved to the camera nodes
// (per-camera display params): retire Main's copies, keeping an older
@@ -484,9 +490,7 @@ impl State {
// reflect live pane state so a reopened project shows real switches.
for p in main_node.params.iter_mut() {
match p.name.as_str() {
- "Circular Pane" | "Show Grid Guide"
- | "Show Reference Cube" | "Show Origin Axes"
- | "Ray Traced Preview" => {
+ "Circular Pane" | "Ray Traced Preview" => {
p.param_type = "toggle".to_string();
p.options.clear();
if p.default != "true" { p.default = "false".to_string(); }
@@ -500,7 +504,7 @@ impl State {
}
}
- const MAIN_PARAM_ORDER: [&str; 35] = [
+ const MAIN_PARAM_ORDER: [&str; 33] = [
"File", "New Project", "Open", "Save", "Save As", "Exit",
"Edit", "Undo", "Redo",
"View", "Show Viewport Pane", "Show Parameters Pane",
@@ -508,7 +512,6 @@ impl State {
"Network", "Show Network Pane", "Zoom In", "Zoom Out",
"Reset Zoom", "Detach Circular Window", "Circular Pane",
"Viewport", "Active Camera",
- "Show Reference Cube", "Show Origin Axes",
"Ray Traced Preview", "Grid Thickness", "Origin Guide Size",
"Camera Pivot Size", "Background Color", "Grid Color",
"Style", "Bevel Profile", "Edge Profile", "Plate Color",
@@ -541,12 +544,16 @@ impl State {
// migrated off Main), sitting in the cell Render vacated.
let guides_node = find_or_create_subnet(&mut self.fs_root, "Guides", "utility", (0.0, 1.0));
guides_node.children.clear();
- let show_grid_seed = migrated_grid.unwrap_or(vp_show_grid);
ensure_param(guides_node, "Guides", "section", "", &[], None, None, None);
- ensure_param(guides_node, "Show Grid Guide", "toggle", bool_str(show_grid_seed), &[], None, None, None);
+ ensure_param(guides_node, "Show Grid Guide", "toggle", bool_str(migrated_grid.unwrap_or(vp_show_grid)), &[], None, None, None);
+ ensure_param(guides_node, "Show Reference Cube", "toggle", bool_str(migrated_cube.unwrap_or(vp_show_cube)), &[], None, None, None);
+ ensure_param(guides_node, "Show Origin Axes", "toggle", bool_str(migrated_origin.unwrap_or(vp_show_origin)), &[], None, None, None);
for p in guides_node.params.iter_mut() {
- if p.name == "Show Grid Guide" {
- set_toggle(p, vp_show_grid);
+ match p.name.as_str() {
+ "Show Grid Guide" => set_toggle(p, vp_show_grid),
+ "Show Reference Cube" => set_toggle(p, vp_show_cube),
+ "Show Origin Axes" => set_toggle(p, vp_show_origin),
+ _ => {}
}
if p.param_type == "toggle" {
if let Some(rest) = p.name.strip_prefix("Show ") {
@@ -656,10 +663,11 @@ impl State {
if let Some(guides_idx) = self.fs_root.children.iter().position(|c| c.name == "Guides") {
let params = self.fs_root.children[guides_idx].params.clone();
for p in ¶ms {
- if p.name == "Show Grid Guide" {
- if let Ok(val) = p.default.parse::<bool>() {
- self.viewport_mut().show_grid = val;
- }
+ match p.name.as_str() {
+ "Show Grid Guide" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_grid = val; }
+ "Show Reference Cube" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_cube = val; }
+ "Show Origin Axes" => if let Ok(val) = p.default.parse::<bool>() { self.viewport_mut().show_origin = val; }
+ _ => {}
}
}
}