forked from 1b-agent/opencadstudio-upstream
# Conflicts: # Cargo.lock # Cargo.toml # crates/ocs_doc_api/Cargo.toml # src/modules/model/mod.rs
102 lines
4.8 KiB
Rust
102 lines
4.8 KiB
Rust
// Solid creation and kernel modelling tools.
|
|
|
|
pub mod boolean_cmd;
|
|
pub mod cylinder_cmd;
|
|
pub mod edge_cmd;
|
|
pub mod polysolid_cmd;
|
|
pub mod primitive_cmd;
|
|
pub mod shell_cmd;
|
|
pub mod slice_cmd;
|
|
|
|
use crate::modules::{CadModule, IconKind, ModuleEvent, RibbonGroup, RibbonItem, ToolDef};
|
|
|
|
pub struct ModelModule;
|
|
|
|
const BOX_ICON: &[u8] = include_bytes!("../../../assets/icons/model/box.svg");
|
|
const CYLINDER_ICON: &[u8] = include_bytes!("../../../assets/icons/model/cylinder.svg");
|
|
const CONE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/cone.svg");
|
|
const SPHERE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/sphere.svg");
|
|
const PYRAMID_ICON: &[u8] = include_bytes!("../../../assets/icons/model/pyramid.svg");
|
|
const WEDGE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/wedge.svg");
|
|
const TORUS_ICON: &[u8] = include_bytes!("../../../assets/icons/model/torus.svg");
|
|
const POLYSOLID_ICON: &[u8] = include_bytes!("../../../assets/icons/model/polysolid.svg");
|
|
const EXTRUDE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/extrude.svg");
|
|
const REVOLVE_ICON: &[u8] = include_bytes!("../../../assets/icons/model/revolve.svg");
|
|
const LOFT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/loft.svg");
|
|
const SWEEP_ICON: &[u8] = include_bytes!("../../../assets/icons/model/sweep.svg");
|
|
const PRESSPULL_ICON: &[u8] = include_bytes!("../../../assets/icons/model/presspull.svg");
|
|
const UNION_ICON: &[u8] = include_bytes!("../../../assets/icons/model/union.svg");
|
|
const SUBTRACT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/subtract.svg");
|
|
const INTERSECT_ICON: &[u8] = include_bytes!("../../../assets/icons/model/intersect.svg");
|
|
const FILLET_ICON: &[u8] = include_bytes!("../../../assets/icons/model/fillet.svg");
|
|
const CHAMFER_ICON: &[u8] = include_bytes!("../../../assets/icons/model/chamfer.svg");
|
|
|
|
/// Helper to declare a ribbon tool that fires a named command.
|
|
fn tool(id: &'static str, label: &'static str, icon: &'static [u8]) -> ToolDef {
|
|
ToolDef {
|
|
id,
|
|
label,
|
|
icon: IconKind::Svg(icon),
|
|
event: ModuleEvent::Command(id.to_string()),
|
|
}
|
|
}
|
|
|
|
impl CadModule for ModelModule {
|
|
fn id(&self) -> &'static str {
|
|
"model"
|
|
}
|
|
fn title(&self) -> &'static str {
|
|
"Modelling"
|
|
}
|
|
|
|
fn ribbon_groups(&self) -> &[RibbonGroup] {
|
|
static GROUPS: std::sync::OnceLock<Vec<RibbonGroup>> = std::sync::OnceLock::new();
|
|
GROUPS.get_or_init(|| {
|
|
vec![
|
|
RibbonGroup {
|
|
title: "Create",
|
|
tools: vec![
|
|
RibbonItem::LargeDropdown {
|
|
id: "MODEL_PRIMITIVES",
|
|
label: "Box",
|
|
icon: IconKind::Svg(BOX_ICON),
|
|
items: vec![
|
|
("BOX", "Box", IconKind::Svg(BOX_ICON)),
|
|
("CYLINDER", "Cylinder", IconKind::Svg(CYLINDER_ICON)),
|
|
("CONE", "Cone", IconKind::Svg(CONE_ICON)),
|
|
("SPHERE", "Sphere", IconKind::Svg(SPHERE_ICON)),
|
|
("PYRAMID", "Pyramid", IconKind::Svg(PYRAMID_ICON)),
|
|
("WEDGE", "Wedge", IconKind::Svg(WEDGE_ICON)),
|
|
("TORUS", "Torus", IconKind::Svg(TORUS_ICON)),
|
|
("POLYSOLID", "Polysolid", IconKind::Svg(POLYSOLID_ICON)),
|
|
],
|
|
default: "BOX",
|
|
},
|
|
RibbonItem::LargeTool(tool("EXTRUDE", "Extrude", EXTRUDE_ICON)),
|
|
RibbonItem::LargeTool(tool("REVOLVE", "Revolve", REVOLVE_ICON)),
|
|
RibbonItem::LargeTool(tool("LOFT", "Loft", LOFT_ICON)),
|
|
RibbonItem::LargeTool(tool("SWEEP", "Sweep", SWEEP_ICON)),
|
|
RibbonItem::LargeTool(tool("PRESSPULL", "Presspull", PRESSPULL_ICON)),
|
|
],
|
|
},
|
|
RibbonGroup {
|
|
title: "Boolean",
|
|
tools: vec![
|
|
RibbonItem::LargeTool(tool("UNION", "Union", UNION_ICON)),
|
|
RibbonItem::LargeTool(tool("SUBTRACT", "Subtract", SUBTRACT_ICON)),
|
|
RibbonItem::LargeTool(tool("INTERSECT", "Intersect", INTERSECT_ICON)),
|
|
],
|
|
},
|
|
RibbonGroup {
|
|
title: "Edges",
|
|
tools: vec![
|
|
RibbonItem::LargeTool(tool("FILLETEDGE", "Fillet Edge", FILLET_ICON)),
|
|
RibbonItem::LargeTool(tool("CHAMFEREDGE", "Chamfer", CHAMFER_ICON)),
|
|
RibbonItem::LargeTool(tool("SHELL", "Shell", PRESSPULL_ICON)),
|
|
],
|
|
},
|
|
]
|
|
})
|
|
}
|
|
}
|