cad-editor/src/modules/annotate/mod.rs

206 lines
9.1 KiB
Rust
Raw Normal View History

// Annotate module — dimension, text, leader, table, and markup tools.
2026-03-22 14:56:27 +03:00
pub mod aligned_dim;
pub mod data_extract;
pub mod data_link;
2026-03-22 14:56:27 +03:00
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;
2026-03-22 14:56:27 +03:00
pub mod leader_cmd;
pub mod linear_dim;
pub mod mleader_cmd;
pub mod mleader_edit;
2026-03-22 14:56:27 +03:00
pub mod mtext;
pub mod ordinate_dim;
pub mod qdim;
2026-03-22 14:56:27 +03:00
pub mod radius_dim;
pub mod table_cmd;
2026-03-22 14:56:27 +03:00
pub mod text;
pub mod tolerance_cmd;
2026-03-22 14:56:27 +03:00
use crate::modules::{CadModule, RibbonGroup, RibbonItem, StyleKey};
2026-03-22 14:56:27 +03:00
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};
2026-03-22 14:56:27 +03:00
vec![
// ── Text ─────────────────────────────────────────────────────
2026-03-22 14:56:27 +03:00
RibbonGroup {
title: "Text",
tools: vec![
RibbonItem::LargeDropdown {
id: "ANNOTATE_TEXT",
label: "Multiline\nText",
icon: mtext::ICON,
2026-03-22 14:56:27 +03:00
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),
2026-03-22 14:56:27 +03:00
],
default: "MTEXT",
2026-03-22 14:56:27 +03:00
},
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()),
},
],
],
},
2026-03-22 14:56:27 +03:00
],
},
// ── Dimensions ───────────────────────────────────────────────
2026-03-22 14:56:27 +03:00
RibbonGroup {
title: "Dimensions",
tools: vec![
RibbonItem::LargeDropdown {
id: "ANNOTATE_DIM",
label: "Dimension",
2026-03-22 14:56:27 +03:00
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),
2026-03-22 14:56:27 +03:00
(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),
2026-03-22 14:56:27 +03:00
],
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(),
],
],
},
2026-03-22 14:56:27 +03:00
],
},
// ── Leaders ──────────────────────────────────────────────────
2026-03-22 14:56:27 +03:00
RibbonGroup {
title: "Leaders",
tools: vec![
RibbonItem::LargeDropdown {
id: "ANNOTATE_LEADER",
label: "Multileader",
icon: mleader_cmd::ICON,
2026-03-22 14:56:27 +03:00
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),
2026-03-22 14:56:27 +03:00
],
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(),
],
],
},
2026-03-22 14:56:27 +03:00
],
},
// ── 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()),
}),
],
},
2026-03-22 14:56:27 +03:00
]
}
}