- 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>
206 lines
9.1 KiB
Rust
206 lines
9.1 KiB
Rust
// Annotate module — dimension, text, leader, table, and markup tools.
|
|
|
|
pub mod aligned_dim;
|
|
pub mod data_extract;
|
|
pub mod data_link;
|
|
pub mod angular_dim;
|
|
pub mod ddedit;
|
|
pub mod diameter_dim;
|
|
pub mod dim_baseline;
|
|
pub mod dim_continue;
|
|
pub mod dimbreak;
|
|
pub mod dimedit;
|
|
pub mod dimjogline;
|
|
pub mod dimspace;
|
|
pub mod dimtedit;
|
|
pub mod leader_cmd;
|
|
pub mod linear_dim;
|
|
pub mod mleader_cmd;
|
|
pub mod mleader_edit;
|
|
pub mod mtext;
|
|
pub mod ordinate_dim;
|
|
pub mod qdim;
|
|
pub mod radius_dim;
|
|
pub mod table_cmd;
|
|
pub mod text;
|
|
pub mod tolerance_cmd;
|
|
|
|
use crate::modules::{CadModule, RibbonGroup, RibbonItem, StyleKey};
|
|
|
|
pub struct AnnotateModule;
|
|
|
|
impl CadModule for AnnotateModule {
|
|
fn id(&self) -> &'static str {
|
|
"annotate"
|
|
}
|
|
fn title(&self) -> &'static str {
|
|
"Annotate"
|
|
}
|
|
|
|
fn ribbon_groups(&self) -> Vec<RibbonGroup> {
|
|
use crate::modules::home::draw::{wipeout, revcloud};
|
|
|
|
vec![
|
|
// ── Text ─────────────────────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Text",
|
|
tools: vec![
|
|
RibbonItem::LargeDropdown {
|
|
id: "ANNOTATE_TEXT",
|
|
label: "Multiline\nText",
|
|
icon: mtext::ICON,
|
|
items: vec![
|
|
(mtext::tool().id, mtext::tool().label, mtext::tool().icon),
|
|
(text::tool().id, text::tool().label, text::tool().icon),
|
|
(ddedit::tool().id, ddedit::tool().label, ddedit::tool().icon),
|
|
],
|
|
default: "MTEXT",
|
|
},
|
|
RibbonItem::StyleComboGroup {
|
|
style_key: StyleKey::TextStyle,
|
|
combo_id: "TEXT_STYLE_COMBO",
|
|
manager_cmd: Some("STYLE"),
|
|
rows: vec![
|
|
vec![
|
|
crate::modules::ToolDef {
|
|
id: "FIND",
|
|
label: "Find",
|
|
icon: crate::modules::IconKind::Svg(include_bytes!("../../../assets/icons/find.svg")),
|
|
event: crate::modules::ModuleEvent::Command("FIND".to_string()),
|
|
},
|
|
],
|
|
],
|
|
},
|
|
],
|
|
},
|
|
// ── Dimensions ───────────────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Dimensions",
|
|
tools: vec![
|
|
RibbonItem::LargeDropdown {
|
|
id: "ANNOTATE_DIM",
|
|
label: "Dimension",
|
|
icon: linear_dim::ICON,
|
|
items: vec![
|
|
(linear_dim::tool().id, linear_dim::tool().label, linear_dim::tool().icon),
|
|
(aligned_dim::tool().id, aligned_dim::tool().label, aligned_dim::tool().icon),
|
|
(angular_dim::tool().id, angular_dim::tool().label, angular_dim::tool().icon),
|
|
(radius_dim::tool().id, radius_dim::tool().label, radius_dim::tool().icon),
|
|
(diameter_dim::tool().id, diameter_dim::tool().label, diameter_dim::tool().icon),
|
|
(ordinate_dim::tool().id, ordinate_dim::tool().label, ordinate_dim::tool().icon),
|
|
(qdim::tool().id, qdim::tool().label, qdim::tool().icon),
|
|
],
|
|
default: "DIMLINEAR",
|
|
},
|
|
RibbonItem::StyleComboGroup {
|
|
style_key: StyleKey::DimStyle,
|
|
combo_id: "DIM_STYLE_COMBO",
|
|
manager_cmd: Some("DIMSTYLE"),
|
|
rows: vec![
|
|
vec![
|
|
qdim::tool(),
|
|
dim_continue::tool(),
|
|
dim_baseline::tool(),
|
|
],
|
|
vec![
|
|
tolerance_cmd::tool(),
|
|
dimedit::tool(),
|
|
dimtedit::tool(),
|
|
dimbreak::tool(),
|
|
dimspace::tool(),
|
|
dimjogline::tool(),
|
|
],
|
|
],
|
|
},
|
|
],
|
|
},
|
|
// ── Leaders ──────────────────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Leaders",
|
|
tools: vec![
|
|
RibbonItem::LargeDropdown {
|
|
id: "ANNOTATE_LEADER",
|
|
label: "Multileader",
|
|
icon: mleader_cmd::ICON,
|
|
items: vec![
|
|
(mleader_cmd::tool().id, mleader_cmd::tool().label, mleader_cmd::tool().icon),
|
|
(leader_cmd::tool().id, leader_cmd::tool().label, leader_cmd::tool().icon),
|
|
],
|
|
default: "MLEADER",
|
|
},
|
|
RibbonItem::StyleComboGroup {
|
|
style_key: StyleKey::MLeaderStyle,
|
|
combo_id: "MLEADER_STYLE_COMBO",
|
|
manager_cmd: Some("MLEADERSTYLE"),
|
|
rows: vec![
|
|
vec![
|
|
mleader_edit::tool_add(),
|
|
mleader_edit::tool_remove(),
|
|
],
|
|
vec![
|
|
mleader_edit::tool_align(),
|
|
mleader_edit::tool_collect(),
|
|
],
|
|
],
|
|
},
|
|
],
|
|
},
|
|
// ── Tables ───────────────────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Tables",
|
|
tools: vec![
|
|
RibbonItem::LargeTool(table_cmd::tool()),
|
|
RibbonItem::StyleComboGroup {
|
|
style_key: StyleKey::TableStyle,
|
|
combo_id: "TABLE_STYLE_COMBO",
|
|
manager_cmd: Some("TABLESTYLE"),
|
|
rows: vec![
|
|
vec![
|
|
data_extract::tool(),
|
|
data_link::tool(),
|
|
],
|
|
],
|
|
},
|
|
],
|
|
},
|
|
// ── Markup ───────────────────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Markup",
|
|
tools: vec![
|
|
RibbonItem::LargeTool(wipeout::tool()),
|
|
RibbonItem::LargeTool(revcloud::tool()),
|
|
],
|
|
},
|
|
// ── Annotation Scaling ───────────────────────────────────────
|
|
RibbonGroup {
|
|
title: "Annotation Scaling",
|
|
tools: vec![
|
|
RibbonItem::Tool(crate::modules::ToolDef {
|
|
id: "ANNOSCALE",
|
|
label: "Scale List",
|
|
icon: crate::modules::IconKind::Glyph("⬡"),
|
|
event: crate::modules::ModuleEvent::Command("ANNOSCALE".to_string()),
|
|
}),
|
|
RibbonItem::Tool(crate::modules::ToolDef {
|
|
id: "OBJECTSCALE",
|
|
label: "Add Scale",
|
|
icon: crate::modules::IconKind::Glyph("⊕"),
|
|
event: crate::modules::ModuleEvent::Command("OBJECTSCALE".to_string()),
|
|
}),
|
|
RibbonItem::Tool(crate::modules::ToolDef {
|
|
id: "SCALELISTEDIT",
|
|
label: "Scale Edit",
|
|
icon: crate::modules::IconKind::Glyph("≡"),
|
|
event: crate::modules::ModuleEvent::Command("SCALELISTEDIT".to_string()),
|
|
}),
|
|
RibbonItem::Tool(crate::modules::ToolDef {
|
|
id: "SYNCPVIEWPORTS",
|
|
label: "Sync Scales",
|
|
icon: crate::modules::IconKind::Glyph("⇄"),
|
|
event: crate::modules::ModuleEvent::Command("SYNCPVIEWPORTS".to_string()),
|
|
}),
|
|
],
|
|
},
|
|
]
|
|
}
|
|
}
|