From a8d05d689443cedd2b8212d762e4c744b8f36df2 Mon Sep 17 00:00:00 2001 From: SBaksa Date: Sat, 31 Oct 2026 15:14:32 +1100 Subject: [PATCH] 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)'. --- apps/cadcraft-cli/src/output.rs | 5 ++++- apps/cadcraft-cli/tests/it/undrawn_entities.rs | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/apps/cadcraft-cli/src/output.rs b/apps/cadcraft-cli/src/output.rs index d783267dc..d7471e7b1 100644 --- a/apps/cadcraft-cli/src/output.rs +++ b/apps/cadcraft-cli/src/output.rs @@ -151,7 +151,10 @@ pub(crate) fn export_framed(s: &Session, out: &Path, window: Option, io pub(crate) fn undrawn_message(d: &cadcraft_engine::doc::Drawing, path: &str) -> Option { 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); } diff --git a/apps/cadcraft-cli/tests/it/undrawn_entities.rs b/apps/cadcraft-cli/tests/it/undrawn_entities.rs index 7e7189379..bf626a7d5 100644 --- a/apps/cadcraft-cli/tests/it/undrawn_entities.rs +++ b/apps/cadcraft-cli/tests/it/undrawn_entities.rs @@ -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); +}