two_boxes/
two-boxes.rs

1//! Example from spec chapter 2.12.1
2
3use std::io::stdout;
4
5use gerber_types::{
6    Aperture, ApertureDefinition, Circle, Command, CoordinateFormat, Coordinates, DCode,
7    ExtendedCode, FileAttribute, FunctionCode, GCode, GenerationSoftware, GerberCode,
8    InterpolationMode, MCode, Operation, Part, Polarity, Unit,
9};
10
11const VERSION: &'static str = env!("CARGO_PKG_VERSION");
12
13fn main() {
14    let cf = CoordinateFormat::new(2, 5);
15    let commands: Vec<Command> = vec![
16        FunctionCode::GCode(GCode::Comment("Ucamco ex. 1: Two square boxes".to_string())).into(),
17        ExtendedCode::CoordinateFormat(cf).into(),
18        ExtendedCode::Unit(Unit::Millimeters).into(),
19        ExtendedCode::FileAttribute(FileAttribute::GenerationSoftware(GenerationSoftware::new(
20            "Rust Gerber",
21            "gerber-types-rs",
22            Some(VERSION),
23        )))
24        .into(),
25        ExtendedCode::FileAttribute(FileAttribute::Part(Part::Other(
26            "Only an example".to_string(),
27        )))
28        .into(),
29        ExtendedCode::LoadPolarity(Polarity::Dark).into(),
30        ExtendedCode::ApertureDefinition(ApertureDefinition {
31            code: 10,
32            aperture: Aperture::Circle(Circle {
33                diameter: 0.01,
34                hole_diameter: None,
35            }),
36        })
37        .into(),
38        FunctionCode::DCode(DCode::SelectAperture(10)).into(),
39        FunctionCode::DCode(DCode::Operation(Operation::Move(Coordinates::new(
40            0, 0, cf,
41        ))))
42        .into(),
43        FunctionCode::GCode(GCode::InterpolationMode(InterpolationMode::Linear)).into(),
44        // TODO: The interpolate representation needs to take the coordinate
45        // format into account!
46        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
47            Coordinates::new(5, 0, cf),
48            None,
49        )))
50        .into(),
51        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
52            Coordinates::at_y(5, cf),
53            None,
54        )))
55        .into(),
56        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
57            Coordinates::at_x(0, cf),
58            None,
59        )))
60        .into(),
61        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
62            Coordinates::at_y(0, cf),
63            None,
64        )))
65        .into(),
66        FunctionCode::DCode(DCode::Operation(Operation::Move(Coordinates::at_x(6, cf)))).into(),
67        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
68            Coordinates::at_x(11, cf),
69            None,
70        )))
71        .into(),
72        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
73            Coordinates::at_y(5, cf),
74            None,
75        )))
76        .into(),
77        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
78            Coordinates::at_x(6, cf),
79            None,
80        )))
81        .into(),
82        FunctionCode::DCode(DCode::Operation(Operation::Interpolate(
83            Coordinates::at_y(0, cf),
84            None,
85        )))
86        .into(),
87        FunctionCode::MCode(MCode::EndOfFile).into(),
88    ];
89    let mut stdout = stdout();
90    commands.serialize(&mut stdout).unwrap();
91}