Skip to content

Commit f424c82

Browse files
authored
Merge pull request #49 from MakerPnP/image-name-1
Add support for `IN` ImageName command.
2 parents 1bfafb6 + 0397fbf commit f424c82

5 files changed

Lines changed: 30 additions & 0 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Possible log types:
2121
It also means when you're making/serializing gerber files you need to choose where to put the attributes.
2222
Refer to Gerber spec 2024.05 - "4.1 Comment (G04)" and "5.1.1 Comment attributes".
2323
Unfortunately, in 2025, manufacturing files containing comment attributes are still widespread.
24+
- [added] Added support for `IN` (ImageName) command.
2425
- [changed] Removed 'Eq' from `FunctionCode`, due to use of `f64` in attributes (`ExtendedCode` wasn't `Eq` either)
2526

2627
### v0.5.0 (2025-07-10)

‎src/codegen.rs‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,11 @@ impl<W: Write> GerberCode<W> for ExtendedCode {
159159
r#as.serialize_partial(writer)?;
160160
writeln!(writer, "*%")?;
161161
}
162+
ExtendedCode::ImageName(ref r#in) => {
163+
write!(writer, "%IN")?;
164+
r#in.serialize_partial(writer)?;
165+
writeln!(writer, "*%")?;
166+
}
162167
};
163168
Ok(())
164169
}

‎src/extended_codes.rs‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -531,3 +531,17 @@ impl Default for ImagePolarity {
531531
ImagePolarity::Positive
532532
}
533533
}
534+
535+
/// Gerber spec 2024.05 8.1.9 "Scale Factor (SF)"
536+
/// By default, A=X, B=Y, but this changes depending on the axis select command (AS)
537+
#[derive(Debug, Clone, PartialEq)]
538+
pub struct ImageName {
539+
pub name: String,
540+
}
541+
542+
impl<W: Write> PartialGerberCode<W> for ImageName {
543+
fn serialize_partial(&self, writer: &mut W) -> GerberResult<()> {
544+
write!(writer, "{}", self.name)?;
545+
Ok(())
546+
}
547+
}

‎src/lib.rs‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1614,4 +1614,12 @@ mod serialization_tests {
16141614
let value = ExtendedCode::AxisSelect(AxisSelect::AYBX);
16151615
assert_code!(value, "%ASAYBX*%\n");
16161616
}
1617+
1618+
#[test]
1619+
fn test_image_name() {
1620+
let value = ExtendedCode::ImageName(ImageName {
1621+
name: "PANEL_1".to_string(),
1622+
});
1623+
assert_code!(value, "%INPANEL_1*%\n");
1624+
}
16171625
}

‎src/types.rs‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,8 @@ pub enum ExtendedCode {
104104
ImagePolarity(extended_codes::ImagePolarity),
105105
/// AS (deprecated in gerber spec since December 2012)
106106
AxisSelect(extended_codes::AxisSelect),
107+
/// IN (deprecated in gerber spec since October 2013)
108+
ImageName(extended_codes::ImageName),
107109
}
108110

109111
impl_from!(

0 commit comments

Comments
 (0)