Page Setup: report unsupported layout plot areas as not available yet (#491) (#597)

Squash of PR #597 by @MarekSpodBiedry.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
MarekSpodBiedry
2026-10-11 14:28:00 -04:00
committed by GitHub
co-authored by Claude Opus 5.5
parent 5e71a75383
commit 04aa716920
2 changed files with 12 additions and 1 deletions
+10
View File
@@ -704,6 +704,10 @@ fn run_pagesetup(s: &mut Session, p: &Value) -> Result<Value> {
if !["layout", "extents", "display", "window", "limits"].contains(&v.as_str()) {
return Err(bad(cmd, "`plotArea` must be layout, extents, display, window or limits"));
}
// Layout plotting always prints the whole sheet; the other areas are only stored for DXF round trips.
if v != "layout" && v != page.plot_area {
return Err(bad(cmd, format!("plot area `{v}` is not available yet; layouts plot the whole sheet (`layout`)")));
}
page.plot_area = v;
}
if let Some(v) = str_param(p, "plotStyleTable") {
@@ -1016,6 +1020,12 @@ mod tests {
assert!(s.execute("pagesetup", &json!({"layout": "Layout1", "margins": [1, 2]})).is_err());
assert!(s.execute("pagesetup", &json!({"layout": "Layout1", "width": 1e308, "height": 5})).is_err());
assert!(s.execute("pagesetup", &json!({"paper": "A4"})).is_err(), "model tab needs a layout");
for area in ["extents", "display", "window", "limits"] {
let e = s.execute("pagesetup", &json!({"layout": "Layout1", "plotArea": area})).unwrap_err();
assert!(e.to_string().contains("not available yet"), "{area}: {e}");
}
let r = s.execute("pagesetup", &json!({"layout": "Layout1", "plotArea": "Layout"})).unwrap();
assert_eq!(r["page"]["plotArea"], "layout");
let report = s.execute("pagesetup", &Value::Null).unwrap();
assert!(report["papers"].as_array().unwrap().len() >= 10);
s.execute("pagesetup", &json!({"layout": "Layout2", "width": 500, "height": 300})).unwrap();