CLI: an OLE2FRAME is not reported as undrawn by an image export (#2422)

Found end to end: convert to PNG drew the frame outline but still said '1 entity
not drawn (OLE2FRAME: 1)'.
This commit is contained in:
SBaksa
2026-10-31 15:14:32 +11:00
parent 74ddfb377f
commit a8d05d6894
2 changed files with 18 additions and 1 deletions
+4 -1
View File
@@ -151,7 +151,10 @@ pub(crate) fn export_framed(s: &Session, out: &Path, window: Option<Bounds2>, io
pub(crate) fn undrawn_message(d: &cadcraft_engine::doc::Drawing, path: &str) -> Option<String> {
let mut types: std::collections::BTreeMap<&str, usize> = std::collections::BTreeMap::new();
for e in d.model.iter() {
if let cadcraft_engine::doc::EntityKind::Unknown(u) = &e.kind {
// An OLE2FRAME's frame outline is drawn (the OLE content is not), so it isn't reported.
if let cadcraft_engine::doc::EntityKind::Unknown(u) = &e.kind
&& !u.dxf_type.eq_ignore_ascii_case("OLE2FRAME")
{
let n = types.entry(u.dxf_type.as_str()).or_insert(0);
*n = n.saturating_add(1);
}
@@ -51,3 +51,17 @@ fn convert_to_an_image_warns_about_entities_it_cannot_draw() {
assert!(!String::from_utf8_lossy(&out.stderr).contains("not drawn"), "{}", String::from_utf8_lossy(&out.stderr));
let _ = std::fs::remove_dir_all(&dir);
}
/// An OLE2FRAME's frame outline is drawn, so an image export doesn't call it undrawn (#2422).
#[test]
fn an_ole_frame_is_not_reported_as_undrawn() {
let dir = std::env::temp_dir().join(format!("cc-cli-ole-{}", std::process::id()));
std::fs::create_dir_all(&dir).unwrap();
let input = dir.join("ole.dxf");
let ole = "0\nSECTION\n2\nENTITIES\n0\nOLE2FRAME\n8\n0\n100\nAcDbOle2Frame\n10\n0\n20\n0\n30\n0\n11\n5\n21\n-3\n31\n0\n0\nENDSEC\n0\nEOF\n";
std::fs::write(&input, ole).unwrap();
let out = cli(&["convert", input.to_str().unwrap(), dir.join("out.png").to_str().unwrap()]);
assert!(out.status.success());
assert!(!String::from_utf8_lossy(&out.stderr).contains("not drawn"), "{}", String::from_utf8_lossy(&out.stderr));
let _ = std::fs::remove_dir_all(&dir);
}