geop_ops_sheetmetal/
examples.rs1use geop_core_editor::registry::ExampleSet;
4use geop_core_math::primitives::FrameAxis;
5use geop_core_program::program::Program;
6use geop_core_sketch::CurveId;
7use geop_ops_model::datums::origin_plane;
8use geop_ops_model::sketch::{
9 Sketch, SketchPlane,
10 figures::{circle, rectangle, solved},
11 whole_sketch,
12};
13use geop_ops_sketch::AddSketchArgs;
14
15use crate::{
16 BaseFlangeArgs, Corner, EdgeFlangeArgs, FlangePosition, LengthReference, SheetCutArgs,
17 SheetMetalRules, edge,
18};
19
20pub fn set() -> ExampleSet {
22 ExampleSet {
23 programs: vec![("sheet_metal_bracket", sheet_metal_bracket)],
24 workspaces: Vec::new(),
25 }
26}
27
28pub fn sheet_metal_bracket() -> Program {
34 let on_z = || Some(SketchPlane::Datum(origin_plane(FrameAxis::Z)));
35 let mut program = Program::new();
36 let mut outline = Sketch::new();
37 let lines = rectangle(&mut outline, [0.0, 0.0], 2.0, 1.2);
38 program.push(
39 "outline",
40 AddSketchArgs {
41 plane: on_z(),
42 sketch: solved(outline),
43 ..Default::default()
44 },
45 );
46 program.push(
47 "plate",
48 BaseFlangeArgs {
49 sketch: whole_sketch("outline"),
50 rules: SheetMetalRules {
51 thickness: 0.08,
52 bend_radius: 0.08,
53 ..SheetMetalRules::default()
54 },
55 depth: 1.0.into(),
56 flip: false,
57 },
58 );
59 let flange = |line: CurveId, length: f64, offset: f64| EdgeFlangeArgs {
60 edge: Some(edge(format!("base_flange(plate,outline,{line},b)"))),
61 angle: 90.0.into(),
62 length: length.into(),
63 reference: LengthReference::OuterSharp,
64 position: FlangePosition::MaterialInside,
65 radius: None,
66 offset_start: offset,
67 offset_end: offset,
68 corner: Corner::Open,
69 };
70 program.push("front", flange(lines[0], 0.6, 0.3));
71 program.push("back", flange(lines[2], 0.4, 0.0));
72 let mut holes = Sketch::new();
73 circle(&mut holes, [0.5, 0.6], 0.15);
74 circle(&mut holes, [1.5, 0.6], 0.15);
75 program.push(
76 "holes",
77 AddSketchArgs {
78 plane: on_z(),
79 sketch: solved(holes),
80 ..Default::default()
81 },
82 );
83 program.push(
84 "mount",
85 SheetCutArgs {
86 sketch: whole_sketch("holes"),
87 face: None,
88 },
89 );
90 program
91}