Baufreigabe-Layout fix auf A3/A4
This commit is contained in:
+70
-34
@@ -51,7 +51,7 @@ ATLAS_CONFIG_BAUFREIGABE_DEFAULT: AtlasConfig = {
|
||||
"sort_expression": "",
|
||||
"sort_ascending": True,
|
||||
"hide_coverage": False,
|
||||
"limit_render_to_current_feature": False,
|
||||
"limit_render_to_current_feature": True,
|
||||
"description": "Baufreigabe Atlas mit Standardkonfiguration",
|
||||
}
|
||||
|
||||
@@ -61,6 +61,7 @@ PLOTMASSSTAB_VAR = "plotmassstab"
|
||||
VIEW_VAR = "view"
|
||||
ZIELGROESSE_VAR = "zielgroesse"
|
||||
FORMFAKTOR_VAR = "formfaktor"
|
||||
ATLAS_ERZEUGEN_UI_VAR = "tab_b_atlas_erzeugen"
|
||||
DRUCKBEREICH_VAR = "druckbereich"
|
||||
DRUCKPUFFER_VAR = "druckpuffer"
|
||||
DRUCKRECHTECK_LAYER_NAME = "Druckrechteck"
|
||||
@@ -484,6 +485,27 @@ class PrintLogic:
|
||||
if atlas is None:
|
||||
return False
|
||||
|
||||
atlas_enabled = bool(atlas_config.get("enabled", True))
|
||||
if not atlas_enabled:
|
||||
set_enabled = getattr(atlas, "setEnabled", None)
|
||||
if callable(set_enabled):
|
||||
try:
|
||||
set_enabled(False)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# Hauptkarte ebenfalls aus Atlas-Steuerung lösen
|
||||
item_by_id = getattr(layout, "itemById", None)
|
||||
if callable(item_by_id):
|
||||
try:
|
||||
hauptkarte = item_by_id("Hauptkarte")
|
||||
set_atlas_driven = getattr(hauptkarte, "setAtlasDriven", None)
|
||||
if callable(set_atlas_driven):
|
||||
set_atlas_driven(False)
|
||||
except Exception:
|
||||
pass
|
||||
return True
|
||||
|
||||
coverage_layer_id = get_variable("sn_abdeckungslayer", scope="project") or ""
|
||||
if not coverage_layer_id:
|
||||
return True
|
||||
@@ -888,19 +910,15 @@ class PrintLogic:
|
||||
|
||||
def _get_baufreigabe_page_dimensions(
|
||||
self,
|
||||
kartenbild_w: float,
|
||||
kartenbild_h: float,
|
||||
zielgroesse: str,
|
||||
) -> tuple[str, float, float, float, float]:
|
||||
"""Berechnet Seitenformat und verfuegbare Kartenfenster fuer Baufreigabe.
|
||||
"""Berechnet feste Seiten- und Hauptkartengroessen fuer Baufreigabe.
|
||||
|
||||
Args:
|
||||
kartenbild_w: Berechnete Kartenbild-Breite aus Extent/Massstab
|
||||
kartenbild_h: Berechnete Kartenbild-Hoehe aus Extent/Massstab
|
||||
zielgroesse: "DIN A3" oder "DIN A4" (wird zu Querformat konvertiert)
|
||||
|
||||
Returns:
|
||||
(din_format, page_width_mm, page_height_mm, adjusted_map_w, adjusted_map_h)
|
||||
(din_format, page_width_mm, page_height_mm, map_w_mm, map_h_mm)
|
||||
"""
|
||||
# Nur A3/A4 im Querformat fuer Baufreigabe
|
||||
if zielgroesse == "DIN A3":
|
||||
@@ -910,18 +928,21 @@ class PrintLogic:
|
||||
din_format = "DIN A4"
|
||||
page_w, page_h = 297.0, 210.0
|
||||
|
||||
# Verfuegbare Flaeche fuer Kartenbild: Seite - Kartenschild und Maerchen
|
||||
kartenschild_w = 120.0
|
||||
# Feste Hauptkartenflaeche aus Querformat mit festen Rändern:
|
||||
# links 10 mm, oben 10 mm, rechts 10 mm, unten 10 mm,
|
||||
# plus 10 mm Abstand zum rechten Seitenbereich.
|
||||
kartenschild_w = 80.0
|
||||
kartenschild_h = 92.0
|
||||
margin = 10.0
|
||||
|
||||
avail_w = page_w - 2 * margin - kartenschild_w - margin
|
||||
avail_h = page_h - 2 * margin - kartenschild_h - margin
|
||||
map_w = page_w - (3 * margin + kartenschild_w)
|
||||
map_h = page_h - (2 * margin)
|
||||
|
||||
adjusted_map_w = min(kartenbild_w, avail_w)
|
||||
adjusted_map_h = min(kartenbild_h, avail_h)
|
||||
# Untergrenzen zur Sicherheit bei abweichenden Seiteneinstellungen
|
||||
map_w = max(map_w, 50.0)
|
||||
map_h = max(map_h, kartenschild_h + margin)
|
||||
|
||||
return din_format, page_w, page_h, adjusted_map_w, adjusted_map_h
|
||||
return din_format, page_w, page_h, map_w, map_h
|
||||
|
||||
def druckvorlage_anlegen(
|
||||
self,
|
||||
@@ -983,22 +1004,23 @@ class PrintLogic:
|
||||
ziel_w = min(plotgroesse_w, cap_w)
|
||||
ziel_h = min(plotgroesse_h, cap_h)
|
||||
|
||||
if ziel_w < DIN_GROESSEN["DIN A4"][0] or ziel_h < DIN_GROESSEN["DIN A4"][1]:
|
||||
self.pruefmanager.zeige_hinweis(
|
||||
"Blattgroesse kleiner als DIN A4",
|
||||
"Die Layouterstellung wird trotzdem fortgesetzt.",
|
||||
)
|
||||
if kartenname_auswahl != KARTENNAME_BAUFREIGABE:
|
||||
if ziel_w < DIN_GROESSEN["DIN A4"][0] or ziel_h < DIN_GROESSEN["DIN A4"][1]:
|
||||
self.pruefmanager.zeige_hinweis(
|
||||
"Blattgroesse kleiner als DIN A4",
|
||||
"Die Layouterstellung wird trotzdem fortgesetzt.",
|
||||
)
|
||||
|
||||
if plotgroesse_w > ziel_w or plotgroesse_h > ziel_h:
|
||||
if plotgroesse_w <= ziel_h and plotgroesse_h <= ziel_w:
|
||||
ziel_w, ziel_h = ziel_h, ziel_w
|
||||
if plotgroesse_w > ziel_w or plotgroesse_h > ziel_h:
|
||||
if plotgroesse_w <= ziel_h and plotgroesse_h <= ziel_w:
|
||||
ziel_w, ziel_h = ziel_h, ziel_w
|
||||
|
||||
if plotgroesse_w > ziel_w or plotgroesse_h > ziel_h:
|
||||
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}
|
||||
if plotgroesse_w > ziel_w or plotgroesse_h > ziel_h:
|
||||
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}
|
||||
|
||||
kartenname = get_variable(KARTENNAME_VAR, scope="project") or KARTENNAME_BY_AUSWAHL.get(
|
||||
kartenname_auswahl, "Vorlage"
|
||||
@@ -1018,10 +1040,8 @@ class PrintLogic:
|
||||
# Verzweigung: Baufreigabe vs. Standard-Layout
|
||||
try:
|
||||
if kartenname_auswahl == KARTENNAME_BAUFREIGABE:
|
||||
# Baufreigabe: feste DIN A3/A4 Querformat-Logik mit 120mm Kartenschild
|
||||
din_format, page_w, page_h, map_w, map_h = self._get_baufreigabe_page_dimensions(
|
||||
kartenbild_w, kartenbild_h, zielgroesse
|
||||
)
|
||||
# Baufreigabe: feste DIN A3/A4 Querformat-Logik mit 80mm Kartenschild
|
||||
din_format, page_w, page_h, map_w, map_h = self._get_baufreigabe_page_dimensions(zielgroesse)
|
||||
PrintLayoutBaufreigabe().create_baufreigabe_layout(
|
||||
name=vorlage_name if vorlage_name != kartenname else "Baufreigabe",
|
||||
din_format=din_format,
|
||||
@@ -1055,8 +1075,24 @@ class PrintLogic:
|
||||
)
|
||||
return {"ok": False, "switch_to_tab_a": False, "atlas_seiten": 0}
|
||||
|
||||
# Nach erfolgreicher Layout-Erstellung: Atlas konfigurieren (falls Baufreigabe)
|
||||
# Nach erfolgreicher Layout-Erstellung: Atlas ggf. konfigurieren (nur falls aktiviert)
|
||||
if kartenname_auswahl == KARTENNAME_BAUFREIGABE:
|
||||
self.configure_atlas_for_baufreigabe_layout()
|
||||
atlas_raw = get_variable(ATLAS_ERZEUGEN_UI_VAR, scope="project")
|
||||
atlas_erzeugen = True if atlas_raw in (None, "") else str(atlas_raw).strip().lower() in {
|
||||
"1",
|
||||
"true",
|
||||
"ja",
|
||||
"yes",
|
||||
"on",
|
||||
}
|
||||
|
||||
if atlas_erzeugen:
|
||||
self.configure_atlas_for_baufreigabe_layout()
|
||||
else:
|
||||
self.configure_atlas_for_baufreigabe_layout(
|
||||
atlas_config={
|
||||
"enabled": False,
|
||||
}
|
||||
)
|
||||
|
||||
return {"ok": True, "switch_to_tab_a": False, "atlas_seiten": 1}
|
||||
|
||||
Reference in New Issue
Block a user