This commit is contained in:
2026-04-17 16:57:26 +02:00
parent 4049090e92
commit 779a1ed63f
+46 -39
View File
@@ -120,6 +120,21 @@ class PrintLogic:
self._rectangle_tool: Any | None = None
self._previous_map_tool: Any | None = None
def _failed_result(self) -> dict:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
def _show_target_size_too_small(self) -> dict:
self.pruefmanager.zeige_hinweis(
"Zielgroesse zu klein",
"Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.",
)
return self._failed_result()
def _is_enabled_flag(self, raw_value: Any) -> bool:
if raw_value in (None, ""):
return True
return str(raw_value).strip().lower() in {"1", "true", "ja", "yes", "on"}
def _resolve_layer_from_project(self) -> object | None:
project = QgsProject.instance()
# Primär: neue zentrale Variable aus sn_verfahrensgebiet_manager
@@ -476,10 +491,15 @@ class PrintLogic:
if not callable(layouts_fn):
return False
try:
layout_list = layouts_fn()
if not layout_list:
layout_iterable = layouts_fn()
if layout_iterable is None:
return False
layout = layout_list[-1]
last_layout: Any | None = None
for candidate_layout in cast(Any, layout_iterable):
last_layout = candidate_layout
if last_layout is None:
return False
layout = last_layout
except Exception:
return False
else:
@@ -1151,7 +1171,7 @@ class PrintLogic:
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41, KARTENNAME_BAUFREIGABE):
self.pruefmanager.zeige_hinweis("Kartennamen waehlen", "Kartennamen waehlen")
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
if massstab_auswahl == MASSSTAB_WIE_KARTENFENSTER:
# Maßstab direkt vom aktuellen Canvas lesen; Projektvariable als Fallback.
@@ -1172,11 +1192,11 @@ class PrintLogic:
if massstab_zahl <= 0:
self.pruefmanager.zeige_hinweis("Massstab fehlt", "Kein gueltiger Massstab angegeben.")
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
extent, layer_for_extent = self._resolve_extent(resolved_layer, druckbereich_auswahl, massstab_zahl)
if extent is None:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
if layer_for_extent is not None:
layer_id = getattr(layer_for_extent, "id", lambda: "")() or ""
@@ -1190,7 +1210,7 @@ class PrintLogic:
force_fit_extent_for_min_a4 = False
if kartenname_auswahl == KARTENNAME_BAUFREIGABE:
din_format, auto_page_w, auto_page_h, auto_map_w, auto_map_h, _bf_fallback = self._get_baufreigabe_page_dimensions(
_, auto_page_w, auto_page_h, auto_map_w, auto_map_h, _bf_fallback = self._get_baufreigabe_page_dimensions(
kartenbild_w,
kartenbild_h,
max_format=zielgroesse if zielgroesse in {"DIN A4", "DIN A3"} else "DIN A3",
@@ -1203,40 +1223,29 @@ class PrintLogic:
formfaktor,
)
if standard_layout is None:
self.pruefmanager.zeige_hinweis(
"Zielgroesse zu klein",
"Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._show_target_size_too_small()
auto_page_w, auto_page_h, auto_map_w, auto_map_h, force_fit_extent_for_min_a4 = standard_layout
# Finale Sicherheitspruefung: alle Layoutobjekte muessen auf die Seite passen.
if kartenname_auswahl == KARTENNAME_BAUFREIGABE:
fits_page = self._does_plot_fit_page(
auto_page_w,
auto_page_h,
auto_map_w,
auto_map_h,
BAUFREIGABE_LAYOUT_FIXBREITE_MM,
BAUFREIGABE_LAYOUT_FIXHOEHE_MM,
)
fixed_width_mm = BAUFREIGABE_LAYOUT_FIXBREITE_MM
fixed_height_mm = BAUFREIGABE_LAYOUT_FIXHOEHE_MM
else:
fits_page = self._does_plot_fit_page(
auto_page_w,
auto_page_h,
auto_map_w,
auto_map_h,
STANDARD_LAYOUT_FIXBREITE_MM,
STANDARD_LAYOUT_FIXHOEHE_MM,
)
fixed_width_mm = STANDARD_LAYOUT_FIXBREITE_MM
fixed_height_mm = STANDARD_LAYOUT_FIXHOEHE_MM
fits_page = self._does_plot_fit_page(
auto_page_w,
auto_page_h,
auto_map_w,
auto_map_h,
fixed_width_mm,
fixed_height_mm,
)
if not fits_page:
self.pruefmanager.zeige_hinweis(
"Zielgroesse zu klein",
"Die gewaehlte Zielgroesse reicht fuer den Einzelblatt-Druck nicht aus.",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._show_target_size_too_small()
kartenname = get_variable(KARTENNAME_VAR, scope="project") or KARTENNAME_BY_AUSWAHL.get(
kartenname_auswahl, "Vorlage"
@@ -1249,15 +1258,13 @@ class PrintLogic:
default_text=kartenname,
)
if not bestaetigt:
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
vorlage_name = (vorlage_name or "").strip() or kartenname
# Atlas-Status vorab bestimmen, damit er sowohl an create_ als auch configure_ uebergeben wird.
atlas_raw_bf = get_variable(ATLAS_ERZEUGEN_UI_VAR, scope="project")
atlas_erzeugen_bf = True if atlas_raw_bf in (None, "") else str(atlas_raw_bf).strip().lower() in {
"1", "true", "ja", "yes", "on",
}
atlas_erzeugen_bf = self._is_enabled_flag(atlas_raw_bf)
# Verzweigung: Baufreigabe vs. Standard-Layout
try:
@@ -1291,13 +1298,13 @@ class PrintLogic:
)
except ValueError as exc:
self.pruefmanager.zeige_hinweis("Vorlage anlegen", str(exc))
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
except Exception as exc:
self.pruefmanager.zeige_hinweis(
"Vorlage anlegen",
f"Die Vorlage konnte nicht angelegt werden: {exc}",
)
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
return self._failed_result()
# Nach erfolgreicher Layout-Erstellung: Atlas ggf. konfigurieren (nur falls aktiviert)
if kartenname_auswahl == KARTENNAME_BAUFREIGABE: