From 284f2a2a038c802ece8c27e56f25b6ca9183b804 Mon Sep 17 00:00:00 2001 From: daniel Date: Fri, 20 Mar 2026 14:31:10 +0100 Subject: [PATCH] bug/Hauptkarte verschwindet beim Druck behoben --- ui/layout.py | 106 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 91 insertions(+), 15 deletions(-) diff --git a/ui/layout.py b/ui/layout.py index 06cd3b9..a4da86e 100644 --- a/ui/layout.py +++ b/ui/layout.py @@ -59,36 +59,110 @@ class Layout: page.setPageSize(QgsLayoutSize(page_width_mm, page_height_mm, MM)) print(f"[Layout] Seitengröße gesetzt: {page_width_mm}x{page_height_mm} mm") + map_left_mm = 10.0 + map_top_mm = 10.0 + map_right_mm = map_left_mm + map_width_mm + map_bottom_mm = map_top_mm + map_height_mm + print( + f"[Layout] Kartenbild-Kanten: rechts={map_right_mm:.1f} mm, unten={map_bottom_mm:.1f} mm" + ) + hauptkarte = QgsLayoutItemMap(layout) hauptkarte.setId("Hauptkarte") - set_rect = getattr(hauptkarte, "setRect", None) - if callable(set_rect): - set_rect(0.0, 0.0, map_width_mm, map_height_mm) - hauptkarte.attemptMove(QgsLayoutPoint(10.0, 10.0, MM)) + print(f"[Layout] QgsLayoutItemMap erstellt") + + # Zum Layout hinzufügen, BEVOR Eigenschaften gesetzt werden + layout.addLayoutItem(hauptkarte) + print("[Layout] Hauptkarte zum Layout hinzugefügt") + + # Position und Größe setzen + hauptkarte.attemptMove(QgsLayoutPoint(map_left_mm, map_top_mm, MM)) hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM)) + print(f"[Layout] Position und Größe gesetzt: pos=({map_left_mm}, {map_top_mm}), size=({map_width_mm:.1f}x{map_height_mm:.1f})") + + # Extent und Maßstab setzen x_min = getattr(extent, "xMinimum", lambda: float("nan"))() y_min = getattr(extent, "yMinimum", lambda: float("nan"))() x_max = getattr(extent, "xMaximum", lambda: float("nan"))() y_max = getattr(extent, "yMaximum", lambda: float("nan"))() print(f"[Layout] Extent input: xmin={x_min}, ymin={y_min}, xmax={x_max}, ymax={y_max}") - hauptkarte.setExtent(extent) + + if extent is not None and hasattr(extent, "isNull") and callable(extent.isNull) and not extent.isNull(): + try: + hauptkarte.setExtent(extent) + print(f"[Layout] setExtent() erfolgreich") + except Exception as exc: + print(f"[Layout] WARN: setExtent() fehlgeschlagen: {exc}") + else: + print(f"[Layout] WARN: Extent nicht gültig/callable, setExtent übersprungen") + + # Maßstab setzen (NACH Extent) if isinstance(plotmassstab, (int, float)) and math.isfinite(plotmassstab) and plotmassstab > 0: - hauptkarte.setScale(plotmassstab) + try: + hauptkarte.setScale(plotmassstab) + print(f"[Layout] setScale({plotmassstab}) erfolgreich") + except Exception as exc: + print(f"[Layout] WARN: setScale({plotmassstab}) fehlgeschlagen: {exc}") else: print(f"[Layout] WARN: ungültiger plotmassstab={plotmassstab!r}, setScale übersprungen") - print(f"[Layout] Hauptkarte angelegt: pos=(10,10), size=({map_width_mm:.1f}x{map_height_mm:.1f})") - + + # Rahmen aktivieren + set_frame_enabled = getattr(hauptkarte, "setFrameEnabled", None) + if callable(set_frame_enabled): + try: + set_frame_enabled(True) + print(f"[Layout] Rahmen aktiviert") + except Exception as exc: + print(f"[Layout] WARN: setFrameEnabled fehlgeschlagen: {exc}") + + set_frame_stroke_width = getattr(hauptkarte, "setFrameStrokeWidth", None) + if callable(set_frame_stroke_width): + try: + set_frame_stroke_width(0.5) + print(f"[Layout] Rahmenstrichbreite auf 0.5 mm gesetzt") + except Exception as exc: + print(f"[Layout] WARN: setFrameStrokeWidth(0.5) fehlgeschlagen: {exc}") + + # Kartenthema setzen if thema and thema != "aktuell": follow_theme = getattr(hauptkarte, "setFollowVisibilityPreset", None) set_theme_name = getattr(hauptkarte, "setFollowVisibilityPresetName", None) if callable(follow_theme): - follow_theme(True) + try: + follow_theme(True) + print(f"[Layout] setFollowVisibilityPreset(True)") + except Exception as exc: + print(f"[Layout] WARN: setFollowVisibilityPreset fehlgeschlagen: {exc}") if callable(set_theme_name): - set_theme_name(thema) - print(f"[Layout] Kartenthema gesetzt: '{thema}'") - - layout.addLayoutItem(hauptkarte) - print("[Layout] Hauptkarte zum Layout hinzugefügt") + try: + set_theme_name(thema) + print(f"[Layout] Kartenthema auf '{thema}' gesetzt") + except Exception as exc: + print(f"[Layout] WARN: setFollowVisibilityPresetName('{thema}') fehlgeschlagen: {exc}") + else: + print(f"[Layout] Kartenthema nicht gesetzt (thema='{thema}')") + + # Erst nach allen Properties: LayerSet einfrieren für Export + set_keep_layer_set = getattr(hauptkarte, "setKeepLayerSet", None) + if callable(set_keep_layer_set): + try: + set_keep_layer_set(True) + print("[Layout] setKeepLayerSet(True) – Layerset für Export erhalten") + except Exception as exc: + print(f"[Layout] WARN: setKeepLayerSet fehlgeschlagen: {exc}") + + # Refresh-Strategie (optional, nur wenn vorhanden) + set_refresh_strategy = getattr(hauptkarte, "setRefreshStrategy", None) + if callable(set_refresh_strategy): + refresh_cache = getattr(hauptkarte, "RefreshLaterOnly", None) or getattr(hauptkarte, "RefreshWhenRequested", None) or 0 + if refresh_cache is not None: + try: + set_refresh_strategy(refresh_cache) + print(f"[Layout] setRefreshStrategy({refresh_cache}) gesetzt") + except Exception as exc: + print(f"[Layout] WARN: setRefreshStrategy fehlgeschlagen: {exc}") + + print(f"[Layout] Hauptkarte vollständig konfiguriert") quellenangabe = QgsLayoutItemLabel(layout) quellenangabe.setId("Quellenangabe") @@ -113,7 +187,9 @@ class Layout: print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}") if callable(set_reference_point) and lower_left is not None: set_reference_point(lower_left) - quellenangabe.attemptMove(QgsLayoutPoint(map_width_mm + 30.0, page_height_mm - 120.0, MM)) + quellenangabe_x_mm = map_right_mm + 20.0 + quellenangabe_y_mm = map_bottom_mm - 120.0 + quellenangabe.attemptMove(QgsLayoutPoint(quellenangabe_x_mm, quellenangabe_y_mm, MM)) quellenangabe.attemptResize(QgsLayoutSize(180.0, 100.0, MM)) layout.addLayoutItem(quellenangabe) print("[Layout] Quellenangabe zum Layout hinzugefügt")