feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
// View module — viewport tools, navigation, visual styles, palettes, interface.
|
2026-03-22 14:56:27 +03:00
|
|
|
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod cascade;
|
|
|
|
|
mod file_tabs;
|
2026-03-22 14:56:27 +03:00
|
|
|
mod hidden;
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod layout_tabs;
|
2026-03-22 14:56:27 +03:00
|
|
|
mod orbit;
|
|
|
|
|
mod ortho;
|
|
|
|
|
mod pan;
|
|
|
|
|
mod persp;
|
2026-05-12 10:36:15 +03:00
|
|
|
pub mod plot_window;
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod properties_palette;
|
|
|
|
|
mod sheetset;
|
2026-03-22 14:56:27 +03:00
|
|
|
mod solid;
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod tile_horiz;
|
|
|
|
|
mod tile_vert;
|
|
|
|
|
mod tool_palettes;
|
2026-06-25 12:36:49 +03:00
|
|
|
pub mod ucs_cmd;
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod ucs_icon;
|
2026-03-22 14:56:27 +03:00
|
|
|
mod view_front;
|
|
|
|
|
mod view_iso;
|
|
|
|
|
mod view_right;
|
|
|
|
|
mod view_top;
|
2026-05-12 10:36:15 +03:00
|
|
|
mod viewcube;
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
mod vports_config;
|
|
|
|
|
mod vports_join;
|
|
|
|
|
mod vports_named;
|
|
|
|
|
mod vports_restore;
|
2026-03-22 14:56:27 +03:00
|
|
|
mod wireframe;
|
|
|
|
|
mod xray;
|
|
|
|
|
mod zoom_ext;
|
|
|
|
|
mod zoom_in;
|
|
|
|
|
mod zoom_out;
|
2026-04-02 23:28:00 +03:00
|
|
|
pub mod zoom_window;
|
2026-03-22 14:56:27 +03:00
|
|
|
|
feat: redesign View tab and fix Annotate/tab order
- Redesign View ribbon tab with 8 groups matching AutoCAD layout:
Viewport Tools (UCS Icon, ViewCube, Navigation Bar),
Navigate, Model Viewports (Viewport Configuration, Named, Join, Restore),
Visual Style (dropdown), Projection, Preset,
Palettes (Tool Palettes, Properties, Sheet Set Manager),
Interface (File Tabs, Layout Tabs, Tile Horiz/Vert, Cascade)
- Add Extract Data and Link Data tools to Annotate → Tables group
- Fix tab order to Home → Insert → Annotate → View → Manage via build.rs PRIORITY list
- Add 17 new SVG icons for all new commands
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 12:25:15 +03:00
|
|
|
use crate::modules::{CadModule, RibbonGroup, RibbonItem};
|
2026-03-22 14:56:27 +03:00
|
|
|
|
|
|
|
|
pub struct ViewModule;
|
|
|
|
|
|
|
|
|
|
impl CadModule for ViewModule {
|
|
|
|
|
fn id(&self) -> &'static str {
|
|
|
|
|
"view"
|
|
|
|
|
}
|
|
|
|
|
fn title(&self) -> &'static str {
|
|
|
|
|
"View"
|
|
|
|
|
}
|
|
|
|
|
|
perf(core): cache ribbon_groups() with OnceLock, avoid per-frame tree allocations
Change CadModule::ribbon_groups() from -> Vec<RibbonGroup> to -> &[RibbonGroup],
backed by a per-module OnceLock cache. The ribbon group tree is static data
(&'static str, Copy enums) that was being fully reconstructed — Vecs, String
clones, enum discriminants — on every call, including all three per-frame
call sites (view(), dropdown_overlay(), style_combo_overlay()).
- 7 built-in modules + 2 plugin templates cache via function-local OnceLock.
Safe because each is a unit struct with exactly one instance per process
(plugins run in isolated child processes; see PluginProcess::spawn()).
- SharedCadModule avoids the static pattern entirely, storing groups in an
instance field (owned.rs).
- IPC runner converts &RibbonGroup -> OwnedRibbonGroup directly via new
From<&T> impls, avoiding an intermediate clone.
- render_small/render_large and the two make_tool_row closures now borrow
(&RibbonItem, &[ToolDef]) instead of taking ownership, so the view loop
doesn't need to clone items to satisfy the old by-value signatures.
- Various match-ergonomics deref fixes (*id, *default, *icon, etc.) from
the &RibbonItem pattern change.
2026-07-02 20:58:48 +01:00
|
|
|
fn ribbon_groups(&self) -> &[RibbonGroup] {
|
|
|
|
|
static GROUPS: std::sync::OnceLock<Vec<RibbonGroup>> = std::sync::OnceLock::new();
|
|
|
|
|
GROUPS.get_or_init(|| {
|
|
|
|
|
vec![
|
|
|
|
|
// ── Viewport Tools ───────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Viewport Tools",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(ucs_icon::tool()),
|
|
|
|
|
RibbonItem::LargeTool(viewcube::tool()),
|
2026-05-12 10:36:15 +03:00
|
|
|
],
|
perf(core): cache ribbon_groups() with OnceLock, avoid per-frame tree allocations
Change CadModule::ribbon_groups() from -> Vec<RibbonGroup> to -> &[RibbonGroup],
backed by a per-module OnceLock cache. The ribbon group tree is static data
(&'static str, Copy enums) that was being fully reconstructed — Vecs, String
clones, enum discriminants — on every call, including all three per-frame
call sites (view(), dropdown_overlay(), style_combo_overlay()).
- 7 built-in modules + 2 plugin templates cache via function-local OnceLock.
Safe because each is a unit struct with exactly one instance per process
(plugins run in isolated child processes; see PluginProcess::spawn()).
- SharedCadModule avoids the static pattern entirely, storing groups in an
instance field (owned.rs).
- IPC runner converts &RibbonGroup -> OwnedRibbonGroup directly via new
From<&T> impls, avoiding an intermediate clone.
- render_small/render_large and the two make_tool_row closures now borrow
(&RibbonItem, &[ToolDef]) instead of taking ownership, so the view loop
doesn't need to clone items to satisfy the old by-value signatures.
- Various match-ergonomics deref fixes (*id, *default, *icon, etc.) from
the &RibbonItem pattern change.
2026-07-02 20:58:48 +01:00
|
|
|
},
|
|
|
|
|
// ── Navigate ─────────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Navigate",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(zoom_ext::tool()),
|
|
|
|
|
RibbonItem::Tool(zoom_window::tool()),
|
|
|
|
|
RibbonItem::Tool(zoom_in::tool()),
|
|
|
|
|
RibbonItem::Tool(zoom_out::tool()),
|
|
|
|
|
RibbonItem::Tool(pan::tool()),
|
|
|
|
|
RibbonItem::Tool(orbit::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// ── Model Viewports ───────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Model Viewports",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(vports_config::tool()),
|
|
|
|
|
RibbonItem::Tool(vports_named::tool()),
|
|
|
|
|
RibbonItem::Tool(vports_join::tool()),
|
|
|
|
|
RibbonItem::Tool(vports_restore::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// ── Visual Style ──────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
// WIREFRAME and SOLID ids are special-cased in ribbon.rs
|
|
|
|
|
// for toggle-state highlighting based on Ribbon::wireframe.
|
|
|
|
|
title: "Visual Style",
|
|
|
|
|
tools: vec![RibbonItem::LargeDropdown {
|
|
|
|
|
id: "VISUAL_STYLE",
|
|
|
|
|
label: "Visual\nStyle",
|
|
|
|
|
icon: wireframe::tool().icon,
|
|
|
|
|
items: vec![
|
|
|
|
|
("WIREFRAME", "Wireframe", wireframe::tool().icon),
|
|
|
|
|
("SOLID", "Shaded", solid::tool().icon),
|
|
|
|
|
("HIDDEN", "Hidden", hidden::tool().icon),
|
|
|
|
|
("XRAY", "X-Ray", xray::tool().icon),
|
|
|
|
|
],
|
|
|
|
|
default: "WIREFRAME",
|
|
|
|
|
}],
|
|
|
|
|
},
|
|
|
|
|
// ── Projection ────────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
// ORTHO and PERSP ids are special-cased in ribbon.rs
|
|
|
|
|
// for toggle-state highlighting based on Camera::projection.
|
|
|
|
|
title: "Projection",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(ortho::tool()),
|
|
|
|
|
RibbonItem::LargeTool(persp::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// ── Preset Views ──────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Preset",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::Tool(view_top::tool()),
|
|
|
|
|
RibbonItem::Tool(view_front::tool()),
|
|
|
|
|
RibbonItem::Tool(view_right::tool()),
|
|
|
|
|
RibbonItem::Tool(view_iso::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// ── Palettes ──────────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Palettes",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(tool_palettes::tool()),
|
|
|
|
|
RibbonItem::LargeTool(properties_palette::tool()),
|
|
|
|
|
RibbonItem::LargeTool(sheetset::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
// ── Interface ─────────────────────────────────────────────────────
|
|
|
|
|
RibbonGroup {
|
|
|
|
|
title: "Interface",
|
|
|
|
|
tools: vec![
|
|
|
|
|
RibbonItem::LargeTool(file_tabs::tool()),
|
|
|
|
|
RibbonItem::LargeTool(layout_tabs::tool()),
|
|
|
|
|
RibbonItem::Tool(tile_horiz::tool()),
|
|
|
|
|
RibbonItem::Tool(tile_vert::tool()),
|
|
|
|
|
RibbonItem::Tool(cascade::tool()),
|
|
|
|
|
],
|
|
|
|
|
},
|
|
|
|
|
]
|
|
|
|
|
})
|
2026-03-22 14:56:27 +03:00
|
|
|
}
|
|
|
|
|
}
|