use super::{ButtonState, WorkbenchButton};
pub const AUTOCONSTRAIN_BUTTON_ID: &str = "sketch.autoconstrain";
pub const DRAW_TOOLS: &[(&str, &str)] = &[
("sketch.tool.select", "select"),
("sketch.tool.point", "point"),
("sketch.tool.line", "line"),
("sketch.tool.rect", "rect"),
("sketch.tool.circle", "circle"),
("sketch.tool.arc", "arc"),
("sketch.tool.bezier", "bezier"),
("sketch.tool.handdraw", "handdraw"),
("sketch.tool.trim", "trim"),
("sketch.tool.pickEdges", "pickEdges"),
];
pub fn draw_tool(id: &str) -> Option<&'static str> {
DRAW_TOOLS.iter().find(|(button, _)| *button == id).map(|(_, tool)| *tool)
}
fn sketch_is_open(state: &ButtonState) -> bool {
state.engine.sketch_mode()
}
fn tool_armed(state: &ButtonState, id: &str) -> bool {
let Some(tool) = draw_tool(id) else {
return false;
};
state.engine.sketch_active_tool().unwrap_or("select") == tool
}
pub static BUTTONS: &[WorkbenchButton] = &[
WorkbenchButton {
id: "sketch.tool.select",
glyph: "\u{1F446}",
ribbon_path: "Home/Sketch/Select drag entities", size: crate::workbench::CommandSize::Compact, tooltip: "Select / drag entities",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.select")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.point",
glyph: "\u{2316}",
ribbon_path: "Home/Sketch/Place a point", size: crate::workbench::CommandSize::Compact, tooltip: "Place a point",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.point")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.line",
glyph: "\u{E06E}",
ribbon_path: "Home/Sketch/Draw connected line segments", size: crate::workbench::CommandSize::Compact, tooltip: "Draw connected line segments (Esc ends)",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.line")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.rect",
glyph: "\u{2610}",
ribbon_path: "Home/Sketch/Draw a rectangle", size: crate::workbench::CommandSize::Compact, tooltip: "Draw a rectangle (two opposite corners)",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.rect")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.circle",
glyph: "\u{25EF}",
ribbon_path: "Home/Sketch/Draw a circle", size: crate::workbench::CommandSize::Compact, tooltip: "Draw a circle (center, then radius)",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.circle")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.arc",
glyph: "\u{25E0}",
ribbon_path: "Home/Sketch/Draw an arc", size: crate::workbench::CommandSize::Compact, tooltip: "Draw an arc (center, start, end)",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.arc")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.bezier",
glyph: "\u{223F}",
ribbon_path: "Home/Sketch/Bezier", size: crate::workbench::CommandSize::Compact, tooltip: "Bezier \u{2014} end, ctrl, ctrl, end; click a spline to add a point",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.bezier")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.handdraw",
glyph: "\u{270D}",
ribbon_path: "Home/Sketch/Freehand", size: crate::workbench::CommandSize::Compact, tooltip: "Freehand (auto line/circle/arc)",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.handdraw")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.trim",
glyph: "\u{2702}",
ribbon_path: "Home/Sketch/Trim curve", size: crate::workbench::CommandSize::Compact, tooltip: "Trim curve",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.trim")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: "sketch.tool.pickEdges",
glyph: "\u{26D3}",
ribbon_path: "Home/Sketch/Link external edge", size: crate::workbench::CommandSize::Compact, tooltip: "Link external edge",
when: Some(sketch_is_open),
pressed: Some(|state| tool_armed(state, "sketch.tool.pickEdges")),
disabled: None,
caption: None,
menu: &[],
},
WorkbenchButton {
id: AUTOCONSTRAIN_BUTTON_ID,
glyph: "\u{1F916}",
ribbon_path: "Home/Sketch/Auto-constrain: infer coincident + horizontal vertical from the geometry", size: crate::workbench::CommandSize::Compact, tooltip: "Auto-constrain: infer coincident + horizontal/vertical from the geometry",
when: Some(sketch_is_open),
pressed: None,
disabled: None,
caption: None,
menu: &[],
},
];