Kartenschild und Legende hinzugefügt

This commit is contained in:
2026-03-24 08:08:42 +01:00
parent 96da2ee566
commit abbd1f908f
3 changed files with 507 additions and 53 deletions
+490 -36
View File
@@ -11,6 +11,7 @@ from sn_basis.functions.qt_wrapper import QFont
from sn_basis.functions.qgiscore_wrapper import ( from sn_basis.functions.qgiscore_wrapper import (
QgsLayoutItem, QgsLayoutItem,
QgsLayoutItemLabel, QgsLayoutItemLabel,
QgsLayoutItemLegend,
QgsLayoutItemMap, QgsLayoutItemMap,
QgsLayoutPoint, QgsLayoutPoint,
QgsLayoutSize, QgsLayoutSize,
@@ -29,19 +30,19 @@ class Layout:
_TEXT_FORMAT_TEMPLATES = { _TEXT_FORMAT_TEMPLATES = {
"Format_1": { "Format_1": {
"font_family": "New Helvetica roman", "font_family": "Arial",
"font_size": 10, "font_size": 10,
"font_style": "normal", "font_style": "normal",
}, },
"Format_2": { "Format_2": {
"font_family": "New Helvetica roman", "font_family": "Arial",
"font_size": 14, "font_size": 10,
"font_style": "fett", "font_style": "bold",
}, },
"Format_3": { "Format_3": {
"font_family": "New Helvetica roman", "font_family": "Arial",
"font_size": 10, "font_size": 14,
"font_style": "normal", "font_style": "bold",
}, },
} }
@@ -70,6 +71,11 @@ class Layout:
"html_mode": True, "html_mode": True,
"text": "", "text": "",
}, },
"legende": {
"id": "Legende",
"object_name": "Legende",
"size_mm": (180.0, 60.0),
},
} }
_QUELLENANGABE_TEXT = ( _QUELLENANGABE_TEXT = (
@@ -83,7 +89,7 @@ class Layout:
"mit teilweise angepasster Signatur<br>" "mit teilweise angepasster Signatur<br>"
) )
_SEITENZAHL_TEXT = "Seite [% attribute(@atlas_feature, 'Seitenzahl') %] von [% @atlas_totalfeatures %]" _SEITENZAHL_TEXT = "Blatt [% attribute(@atlas_feature, 'Seitenzahl') %] von [% @atlas_totalfeatures %]"
def __init__(self, project: Any | None = None) -> None: def __init__(self, project: Any | None = None) -> None:
self.project = project or QgsProject.instance() self.project = project or QgsProject.instance()
@@ -178,7 +184,14 @@ class Layout:
object_name=object_name, object_name=object_name,
) )
def _setup_layout_objects(self, kartenfenster_untere_rechte_ecke_mm: tuple, is_atlas: bool = False) -> None: def _setup_layout_objects(
self,
kartenfenster_untere_rechte_ecke_mm: tuple,
hauptkarte: Any,
map_top_mm: float,
map_height_mm: float,
is_atlas: bool = False,
) -> None:
"""Zentrale Methode zum Hinzufügen aller Standard-Objekte ins Layout. """Zentrale Methode zum Hinzufügen aller Standard-Objekte ins Layout.
Diese Methode wird sowohl von create_single_page_layout() als auch von create_atlas_layout() aufgerufen. Diese Methode wird sowohl von create_single_page_layout() als auch von create_atlas_layout() aufgerufen.
@@ -190,32 +203,71 @@ class Layout:
if self._current_layout is None: if self._current_layout is None:
raise RuntimeError("Kein Layout aktiv.") raise RuntimeError("Kein Layout aktiv.")
def _coords_rel_untere_rechte_ecke(rel_x_mm: float, rel_y_mm: float) -> tuple[float, float]:
return (
kartenfenster_untere_rechte_ecke_mm[0] + rel_x_mm,
kartenfenster_untere_rechte_ecke_mm[1] + rel_y_mm,
)
mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None) mode_html = getattr(QgsLayoutItemLabel, "ModeHtml", None)
print(f"[Layout] QgsLayoutItemLabel.ModeHtml={mode_html!r}") print(f"[Layout] QgsLayoutItemLabel.ModeHtml={mode_html!r}")
lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None) lower_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "LowerLeft", None)
print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}") print(f"[Layout] QgsLayoutItem.ReferencePoint.LowerLeft={lower_left!r}")
# Quellenangabe: unterschiedliche Positionen für Einzelblatt vs. Atlas legende_x = kartenfenster_untere_rechte_ecke_mm[0] + 10.0
if is_atlas: legende_height_mm = max(map_height_mm - 122.0, 20.0)
quellenangabe_x = kartenfenster_untere_rechte_ecke_mm[0] + 5.0 legende_y = map_top_mm
quellenangabe_y = kartenfenster_untere_rechte_ecke_mm[1] legende = self._create_legend_item(
else:
quellenangabe_x = kartenfenster_untere_rechte_ecke_mm[0] + 10.0
quellenangabe_y = kartenfenster_untere_rechte_ecke_mm[1] - 120.0
self._create_label_item(
self._current_layout, self._current_layout,
"quellenangabe", "legende",
hauptkarte,
legende_x,
legende_y,
width_mm=180.0,
height_mm=legende_height_mm,
object_name="Legende",
)
legende_hoehe_mm = self._configure_legend_size(
legende,
width_limit_mm=180.0,
column_count=1,
equal_column_width=False,
)
quellenangabe_x, quellenangabe_y = _coords_rel_untere_rechte_ecke(10.0, -102.0)
quellenangabe_hoehe_mm = 20.0
quellenangabe_obere_y = quellenangabe_y - quellenangabe_hoehe_mm
legende_untere_y = legende_y + legende_hoehe_mm
if legende_untere_y > quellenangabe_obere_y:
legende_hoehe_mm = self._configure_legend_size(
legende,
width_limit_mm=180.0,
column_count=2,
equal_column_width=True,
)
print("[Layout] Legende überlappt Quellenangabe – auf 2 Spalten umgestellt")
print("[Layout] Legende zum Layout hinzugefügt")
# Quellenangabe:
self.add_text_label(
self._QUELLENANGABE_TEXT, self._QUELLENANGABE_TEXT,
quellenangabe_x, quellenangabe_x,
quellenangabe_y, quellenangabe_y,
width_mm=180.0,
height_mm=20.0,
text_format="Format_1",
html_mode=True, html_mode=True,
expression_enabled=True,
object_name="Quellenangabe",
) )
print("[Layout] Quellenangabe zum Layout hinzugefügt") print("[Layout] Quellenangabe zum Layout hinzugefügt")
# Kartenschild-Box, -Linien und -Text werden hier ergänzt (TODO) # Kartenschild-Box, -Linien und -Text werden hier ergänzt (TODO)
#Kartenschild-Box #Kartenschild-Box
kartenschild_x = kartenfenster_untere_rechte_ecke_mm[0] + 10.0 kartenschild_x, kartenschild_y = _coords_rel_untere_rechte_ecke(10.0, 0.0)
kartenschild_y = kartenfenster_untere_rechte_ecke_mm[1]
self._create_rectangle_box_item( self._create_rectangle_box_item(
self._current_layout, self._current_layout,
"Kartenschild", "Kartenschild",
@@ -223,19 +275,20 @@ class Layout:
kartenschild_y, kartenschild_y,
180.0, 180.0,
92.0, 92.0,
stroke_width_mm= 1.0, stroke_width_mm=1.0,
) )
print("[Layout] Kartenschild-Box zum Layout hinzugefügt") print("[Layout] Kartenschild-Box zum Layout hinzugefügt")
#Kartenschild-Linien #Kartenschild-Linien
kartenschild_line_x = kartenfenster_untere_rechte_ecke_mm[0] + 10.0 kartenschild_line_x, _ = _coords_rel_untere_rechte_ecke(10.0, 0.0)
kartenschild_line_offsets_y = (-10.0, -20.0, -30.0, -46.0, -62.0, -82.0) kartenschild_line_offsets_y = (-10.0, -20.0, -30.0, -46.0, -62.0, -82.0)
for index, offset_y in enumerate(kartenschild_line_offsets_y, start=1): for index, offset_y in enumerate(kartenschild_line_offsets_y, start=1):
_, line_y = _coords_rel_untere_rechte_ecke(0.0, offset_y)
self._create_rectangle_box_item( self._create_rectangle_box_item(
self._current_layout, self._current_layout,
f"Kartenschild_Linie_{index}", f"Kartenschild_Linie_{index}",
kartenschild_line_x, kartenschild_line_x,
kartenfenster_untere_rechte_ecke_mm[1] + offset_y, line_y,
180.0, 180.0,
0.0, 0.0,
stroke_width_mm=0.1, stroke_width_mm=0.1,
@@ -244,33 +297,147 @@ class Layout:
#Kartenschild-Text #Kartenschild-Text
#Herausgeber #Herausgeber
self.add_text_label("@Amt", 10.0, -92.0, text_format="Format_1", object_name="Herausgeber") herausgeber_x, herausgeber_y = _coords_rel_untere_rechte_ecke(16.0, -85.0)
self.add_text_label(
"[% @sn_amt %]",
herausgeber_x,
herausgeber_y,
width_mm=171.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Herausgeber",
)
#Bezeichnung_Flurbereinigung #Bezeichnung_Flurbereinigung
bezeichnung_flurbereinigung_x, bezeichnung_flurbereinigung_y = _coords_rel_untere_rechte_ecke(16.0, -75.0)
self.add_text_label(
"[% @sn_bezeichnung %]",
bezeichnung_flurbereinigung_x,
bezeichnung_flurbereinigung_y,
width_mm=171.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Bezeichnung_Flurbereinigung",
)
#Name Flurbereinigung #Name Flurbereinigung
name_flurbereinigung_x, name_flurbereinigung_y = _coords_rel_untere_rechte_ecke(16.0, -65.0)
self.add_text_label(
"[% @sn_name %]",
name_flurbereinigung_x,
name_flurbereinigung_y,
width_mm=171.0,
height_mm=5.0,
text_format="Format_3",
expression_enabled=True,
object_name="Name_Flurbereinigung",
)
#Stadt_Gemeinde #Stadt_Gemeinde
stadt_gemeinde_x, stadt_gemeinde_y = _coords_rel_untere_rechte_ecke(16.0, -57.0)
self.add_text_label(
"[% @sn_gemeinden %]",
stadt_gemeinde_x,
stadt_gemeinde_y,
width_mm=171.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Stadt_Gemeinde",
)
#Landkreis #Landkreis
landkreis_x, landkreis_y = _coords_rel_untere_rechte_ecke(16.0, -49.0)
self.add_text_label(
"[% @sn_landkreise_proj %]",
landkreis_x,
landkreis_y,
width_mm=171.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Landkreis",
)
#Kartenname #Kartenname
kartenname_x, kartenname_y = _coords_rel_untere_rechte_ecke(16.0, -33.0)
self.add_text_label(
"[% @sn_kartenname %]",
kartenname_x,
kartenname_y,
width_mm=137.0,
height_mm=5.0,
text_format="Format_3",
expression_enabled=True,
object_name="Kartenname",
)
#Ergänzung(Seitenzahl) #Ergänzung(Seitenzahl)
#gefertigt #gefertigt
gefertigt_x, gefertigt_y = _coords_rel_untere_rechte_ecke(16.0, -23.0)
self.add_text_label(
"Gefertigt: ",
gefertigt_x,
gefertigt_y,
width_mm=81.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Gefertigt",
)
#geprüft #geprüft
geprüft_x, geprüft_y = _coords_rel_untere_rechte_ecke(101.0, -23.0)
self.add_text_label(
"Geprüft: ",
geprüft_x,
geprüft_y,
width_mm=81.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Geprüft",
)
#Maßstab #Maßstab
maßstab_x, maßstab_y = _coords_rel_untere_rechte_ecke(16.0, -13.0)
self.add_text_label(
"Maßstab: 1 : [%round(map_get(item_variables('Hauptkarte'),'map_scale'),0)%]",
maßstab_x,
maßstab_y,
width_mm=81.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Maßstab",
)
#Ausgabedatum #Ausgabedatum
ausgabedatum_x, ausgabedatum_y = _coords_rel_untere_rechte_ecke(101.0, -13.0)
self.add_text_label(
"Ausgabedatum: [%format_date(now(), 'dd.MM.yyyy')%]",
ausgabedatum_x,
ausgabedatum_y,
width_mm=81.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Ausgabedatum",
)
#Aktenzeichen #Aktenzeichen
aktenzeichen_x, aktenzeichen_y = _coords_rel_untere_rechte_ecke(16.0, -3.0)
self.add_text_label(
"Aktenzeichen: ",
aktenzeichen_x,
aktenzeichen_y,
width_mm=171.0,
height_mm=4.0,
text_format="Format_1",
expression_enabled=True,
object_name="Aktenzeichen",
)
# Seitenzahl nur bei Atlas-Layout # Seitenzahl nur bei Atlas-Layout
if is_atlas: if is_atlas:
seitenzahl_x = kartenfenster_untere_rechte_ecke_mm[0] + 5.0 seitenzahl_x, seitenzahl_y = _coords_rel_untere_rechte_ecke(166.0, -33.0)
seitenzahl_y = kartenfenster_untere_rechte_ecke_mm[1] - 2.0
self._create_label_item( self._create_label_item(
self._current_layout, self._current_layout,
"seitenzahl", "seitenzahl",
@@ -301,10 +468,11 @@ class Layout:
) -> Any: ) -> Any:
template = self._OBJECT_TEMPLATES[template_name] template = self._OBJECT_TEMPLATES[template_name]
label = QgsLayoutItemLabel(layout) label = QgsLayoutItemLabel(layout)
label.setId(template["id"]) item_id = object_name or template["id"]
label.setId(item_id)
set_object_name = getattr(label, "setObjectName", None) set_object_name = getattr(label, "setObjectName", None)
if callable(set_object_name): if callable(set_object_name):
set_object_name(object_name or template.get("object_name", template["id"])) set_object_name(item_id)
label.setText(text) label.setText(text)
if html_mode: if html_mode:
@@ -346,9 +514,276 @@ class Layout:
MM, MM,
) )
) )
set_locked = getattr(label, "setLocked", None)
if callable(set_locked):
try:
set_locked(True)
except Exception:
pass
layout.addLayoutItem(label) layout.addLayoutItem(label)
return label return label
def _resolve_visible_map_layers(self, map_item: Any) -> list[Any]:
layers_method = getattr(map_item, "layers", None)
if callable(layers_method):
try:
resolved_layers = layers_method()
if isinstance(resolved_layers, (list, tuple)):
layers = [layer for layer in resolved_layers if layer is not None]
if layers:
return layers
except Exception:
pass
layer_tree_root_method = getattr(self.project, "layerTreeRoot", None)
if not callable(layer_tree_root_method):
return []
try:
root = layer_tree_root_method()
except Exception:
return []
find_layers = getattr(root, "findLayers", None)
if not callable(find_layers):
return []
visible_layers: list[Any] = []
try:
tree_layers = find_layers()
if not isinstance(tree_layers, (list, tuple)):
return []
for tree_layer in tree_layers:
is_visible = getattr(tree_layer, "itemVisibilityChecked", None)
if callable(is_visible) and not is_visible():
continue
layer = getattr(tree_layer, "layer", None)
resolved_layer = layer() if callable(layer) else None
if resolved_layer is not None:
visible_layers.append(resolved_layer)
except Exception:
return []
return visible_layers
def _create_legend_item(
self,
layout: Any,
template_name: str,
linked_map: Any,
x_mm: float,
y_mm: float,
*,
width_mm: float | None = None,
height_mm: float | None = None,
object_name: str | None = None,
) -> Any:
template = self._OBJECT_TEMPLATES[template_name]
legend = QgsLayoutItemLegend(layout)
item_id = object_name or template["id"]
legend.setId(item_id)
set_object_name = getattr(legend, "setObjectName", None)
if callable(set_object_name):
set_object_name(item_id)
set_linked_map = getattr(legend, "setLinkedMap", None)
if callable(set_linked_map):
try:
set_linked_map(linked_map)
except Exception:
pass
set_title = getattr(legend, "setTitle", None)
if callable(set_title):
try:
set_title("Legende")
except Exception:
pass
set_auto_update_model = getattr(legend, "setAutoUpdateModel", None)
if callable(set_auto_update_model):
try:
set_auto_update_model(False)
except Exception:
pass
set_filter_by_map = getattr(legend, "setLegendFilterByMapEnabled", None)
if callable(set_filter_by_map):
try:
set_filter_by_map(False)
except Exception:
pass
model_method = getattr(legend, "model", None)
if callable(model_method):
try:
model = model_method()
root_group_method = getattr(model, "rootGroup", None)
root_group = root_group_method() if callable(root_group_method) else None
clear = getattr(root_group, "clear", None)
if callable(clear):
clear()
add_layer = getattr(root_group, "addLayer", None)
if callable(add_layer):
for layer in self._resolve_visible_map_layers(linked_map):
add_layer(layer)
except Exception:
pass
set_reference_point = getattr(legend, "setReferencePoint", None)
upper_left = getattr(getattr(QgsLayoutItem, "ReferencePoint", object), "UpperLeft", None)
if callable(set_reference_point) and upper_left is not None:
set_reference_point(upper_left)
template_width, template_height = template.get("size_mm", (0.0, 0.0))
legend.attemptMove(QgsLayoutPoint(x_mm, y_mm, MM))
legend.attemptResize(
QgsLayoutSize(
width_mm if width_mm is not None else template_width,
height_mm if height_mm is not None else template_height,
MM,
)
)
set_frame_enabled = getattr(legend, "setFrameEnabled", None)
if callable(set_frame_enabled):
try:
set_frame_enabled(True)
except Exception:
pass
self._set_item_frame_stroke_width(legend, 0.3)
set_background_enabled = getattr(legend, "setBackgroundEnabled", None)
if callable(set_background_enabled):
try:
set_background_enabled(False)
except Exception:
pass
set_locked = getattr(legend, "setLocked", None)
if callable(set_locked):
try:
set_locked(True)
except Exception:
pass
layout.addLayoutItem(legend)
refresh = getattr(legend, "refresh", None)
if callable(refresh):
try:
refresh()
except Exception:
pass
return legend
def _get_item_size_mm(self, item: Any) -> tuple[float | None, float | None]:
def _to_float(value: Any) -> float | None:
if isinstance(value, (int, float)):
return float(value)
if isinstance(value, str):
try:
return float(value)
except Exception:
return None
return None
size_with_units = getattr(item, "sizeWithUnits", None)
if callable(size_with_units):
try:
size = size_with_units()
get_width = getattr(size, "width", None)
get_height = getattr(size, "height", None)
width = _to_float(get_width()) if callable(get_width) else None
height = _to_float(get_height()) if callable(get_height) else None
if width is not None and height is not None:
return width, height
except Exception:
pass
rect = getattr(item, "rect", None)
if callable(rect):
try:
item_rect = rect()
get_width = getattr(item_rect, "width", None)
get_height = getattr(item_rect, "height", None)
width = _to_float(get_width()) if callable(get_width) else None
height = _to_float(get_height()) if callable(get_height) else None
return width, height
except Exception:
pass
return None, None
def _configure_legend_size(
self,
legend: Any,
*,
width_limit_mm: float,
column_count: int,
equal_column_width: bool,
) -> float:
set_locked = getattr(legend, "setLocked", None)
if callable(set_locked):
try:
set_locked(False)
except Exception:
pass
set_column_count = getattr(legend, "setColumnCount", None)
if callable(set_column_count):
try:
set_column_count(column_count)
except Exception:
pass
set_equal_column_width = getattr(legend, "setEqualColumnWidth", None)
if callable(set_equal_column_width):
try:
set_equal_column_width(equal_column_width)
except Exception:
pass
refresh = getattr(legend, "refresh", None)
if callable(refresh):
try:
refresh()
except Exception:
pass
adjust_box_size = getattr(legend, "adjustBoxSize", None)
if callable(adjust_box_size):
try:
adjust_box_size()
except Exception:
pass
width_mm, height_mm = self._get_item_size_mm(legend)
resolved_width = width_mm if width_mm is not None else width_limit_mm
resolved_height = height_mm if height_mm is not None else 20.0
final_width = min(resolved_width, width_limit_mm)
legend.attemptResize(QgsLayoutSize(final_width, resolved_height, MM))
if callable(refresh):
try:
refresh()
except Exception:
pass
_, updated_height_mm = self._get_item_size_mm(legend)
if callable(set_locked):
try:
set_locked(True)
except Exception:
pass
return updated_height_mm if updated_height_mm is not None else resolved_height
def _create_rectangle_box_item( def _create_rectangle_box_item(
self, self,
layout: Any, layout: Any,
@@ -392,6 +827,13 @@ class Layout:
except Exception: except Exception:
pass pass
set_locked = getattr(box, "setLocked", None)
if callable(set_locked):
try:
set_locked(True)
except Exception:
pass
layout.addLayoutItem(box) layout.addLayoutItem(box)
return box return box
@@ -531,7 +973,13 @@ class Layout:
print(f"[Layout] Hauptkarte vollständig konfiguriert") print(f"[Layout] Hauptkarte vollständig konfiguriert")
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=False) self._setup_layout_objects(
kartenfenster_untere_rechte_ecke_mm,
hauptkarte,
map_top_mm,
map_height_mm,
is_atlas=False,
)
layout_manager.addLayout(layout) layout_manager.addLayout(layout)
print("[Layout] Layout zum LayoutManager hinzugefügt") print("[Layout] Layout zum LayoutManager hinzugefügt")
@@ -706,7 +1154,13 @@ class Layout:
hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM)) hauptkarte.attemptResize(QgsLayoutSize(map_width_mm, map_height_mm, MM))
print(f"[Layout] Atlas Hauptkarte Größe nach Atlas-Konfiguration erneut gesetzt: {map_width_mm:.1f}mm × {map_height_mm:.1f}mm") print(f"[Layout] Atlas Hauptkarte Größe nach Atlas-Konfiguration erneut gesetzt: {map_width_mm:.1f}mm × {map_height_mm:.1f}mm")
self._setup_layout_objects(kartenfenster_untere_rechte_ecke_mm, is_atlas=True) self._setup_layout_objects(
kartenfenster_untere_rechte_ecke_mm,
hauptkarte,
map_top_mm,
map_height_mm,
is_atlas=True,
)
atlas = layout.atlas() atlas = layout.atlas()
if atlas is not None: if atlas is not None:
+11 -11
View File
@@ -22,11 +22,11 @@ from sn_basis.modules.layerpruefer import Layerpruefer
from sn_plan41.ui.layout import Layout from sn_plan41.ui.layout import Layout
KARTENNAME_VAR = "sn_kartenname" KARTENNAME_VAR = "kartenname"
PLOTMASSSTAB_VAR = "sn_plotmassstab" PLOTMASSSTAB_VAR = "plotmassstab"
VIEW_VAR = "sn_view" VIEW_VAR = "view"
ZIELGROESSE_VAR = "sn_zielgroesse" ZIELGROESSE_VAR = "zielgroesse"
FORMFAKTOR_VAR = "sn_formfaktor" FORMFAKTOR_VAR = "formfaktor"
KARTENNAME_38 = "§38" KARTENNAME_38 = "§38"
KARTENNAME_41 = "§41" KARTENNAME_41 = "§41"
MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster" MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster"
@@ -287,12 +287,12 @@ class TabBLogic:
return loaded_layer return loaded_layer
def set_kartenname_for_auswahl(self, auswahl: str) -> None: def set_kartenname_for_auswahl(self, auswahl: str) -> None:
"""Setzt die Projektvariable ``sn_kartenname`` anhand der Kartennamen-Auswahl.""" """Setzt die Projektvariable ``kartenname`` anhand der Kartennamen-Auswahl."""
kartenname = KARTENNAME_BY_AUSWAHL.get(auswahl, "") kartenname = KARTENNAME_BY_AUSWAHL.get(auswahl, "")
set_variable(KARTENNAME_VAR, kartenname, scope="project") set_variable(KARTENNAME_VAR, kartenname, scope="project")
def set_plotmassstab_for_auswahl(self, auswahl: str, aktueller_massstab: float | None = None) -> None: def set_plotmassstab_for_auswahl(self, auswahl: str, aktueller_massstab: float | None = None) -> None:
"""Setzt die Projektvariable ``sn_plotmassstab`` anhand der Maßstabsauswahl.""" """Setzt die Projektvariable ``plotmassstab`` anhand der Maßstabsauswahl."""
if auswahl == MASSSTAB_WIE_KARTENFENSTER: if auswahl == MASSSTAB_WIE_KARTENFENSTER:
if aktueller_massstab and aktueller_massstab > 0: if aktueller_massstab and aktueller_massstab > 0:
set_variable(PLOTMASSSTAB_VAR, str(int(round(aktueller_massstab))), scope="project") set_variable(PLOTMASSSTAB_VAR, str(int(round(aktueller_massstab))), scope="project")
@@ -304,7 +304,7 @@ class TabBLogic:
set_variable(PLOTMASSSTAB_VAR, value, scope="project") set_variable(PLOTMASSSTAB_VAR, value, scope="project")
def set_view_for_auswahl(self, auswahl: str) -> None: def set_view_for_auswahl(self, auswahl: str) -> None:
"""Setzt ``sn_view`` auf ``aktuell`` oder den Namen des gewählten Layerthemas.""" """Setzt die Projektvariable ``view`` auf ``aktuell`` oder den Namen des gewählten Layerthemas."""
if auswahl == THEMA_WIE_KARTENFENSTER: if auswahl == THEMA_WIE_KARTENFENSTER:
set_variable(VIEW_VAR, "aktuell", scope="project") set_variable(VIEW_VAR, "aktuell", scope="project")
return return
@@ -312,11 +312,11 @@ class TabBLogic:
set_variable(VIEW_VAR, auswahl or "", scope="project") set_variable(VIEW_VAR, auswahl or "", scope="project")
def set_zielgroesse_for_auswahl(self, auswahl: str) -> None: def set_zielgroesse_for_auswahl(self, auswahl: str) -> None:
"""Setzt ``sn_zielgroesse`` auf den gewählten DIN-Namen.""" """Setzt ``zielgroesse`` auf den gewählten DIN-Namen."""
set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project") set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project")
def set_formfaktor(self, endlosrolle: bool) -> None: def set_formfaktor(self, endlosrolle: bool) -> None:
"""Setzt ``sn_formfaktor`` auf ``Endlosrolle`` oder ``Blatt``.""" """Setzt die Projektvariable ``formfaktor`` auf ``Endlosrolle`` oder ``Blatt``."""
set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project") set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project")
# ───────────────────────────────────────────────────────────────────────── # ─────────────────────────────────────────────────────────────────────────
@@ -358,7 +358,7 @@ class TabBLogic:
return {"ok": False, "switch_to_tab_a": True, "atlas_seiten": 0} return {"ok": False, "switch_to_tab_a": True, "atlas_seiten": 0}
layer_id = getattr(layer, "id", lambda: "")() or "" layer_id = getattr(layer, "id", lambda: "")() or ""
set_variable("sn_verfahrensgebietslayer", layer_id, scope="project") set_variable("verfahrensgebietslayer", layer_id, scope="project")
# ─── 2. Kartenname prüfen ───────────────────────────────────────── # ─── 2. Kartenname prüfen ─────────────────────────────────────────
if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41): if kartenname_auswahl not in (KARTENNAME_38, KARTENNAME_41):
+5 -5
View File
@@ -206,7 +206,7 @@ class TabB(QWidget):
self._endlosrolle_cb.setChecked(saved_formfaktor == "Endlosrolle") self._endlosrolle_cb.setChecked(saved_formfaktor == "Endlosrolle")
def _on_kartenname_changed(self, value: str) -> None: def _on_kartenname_changed(self, value: str) -> None:
"""Persistiert die Kartennamen-Auswahl und setzt ``sn_kartenname``.""" """Persistiert die Kartennamen-Auswahl und setzt ``kartenname``."""
if value in (KARTENNAME_38, KARTENNAME_41): if value in (KARTENNAME_38, KARTENNAME_41):
set_variable(KARTENNAME_VAR, value, scope="project") set_variable(KARTENNAME_VAR, value, scope="project")
else: else:
@@ -216,26 +216,26 @@ class TabB(QWidget):
self.logic.set_kartenname_for_auswahl(value) self.logic.set_kartenname_for_auswahl(value)
def _on_massstab_changed(self, value: str) -> None: def _on_massstab_changed(self, value: str) -> None:
"""Persistiert Maßstabsauswahl und setzt ``sn_plotmassstab``.""" """Persistiert Maßstabsauswahl und setzt ``plotmassstab``."""
set_variable(MASSSTAB_VAR, value, scope="project") set_variable(MASSSTAB_VAR, value, scope="project")
if self.logic: if self.logic:
self.logic.set_plotmassstab_for_auswahl(value, self._get_current_canvas_scale()) self.logic.set_plotmassstab_for_auswahl(value, self._get_current_canvas_scale())
def _on_thema_changed(self, value: str) -> None: def _on_thema_changed(self, value: str) -> None:
"""Persistiert die Thema-Auswahl und setzt ``sn_view``.""" """Persistiert die Thema-Auswahl und setzt ``view``."""
set_variable(THEMA_VAR, value, scope="project") set_variable(THEMA_VAR, value, scope="project")
if self.logic: if self.logic:
self.logic.set_view_for_auswahl(value) self.logic.set_view_for_auswahl(value)
def _on_zielgroesse_changed(self, value: str) -> None: def _on_zielgroesse_changed(self, value: str) -> None:
"""Persistiert Blattgröße und setzt ``sn_zielgroesse``.""" """Persistiert Blattgröße und setzt ``zielgroesse``."""
set_variable(ZIELGROESSE_UI_VAR, value, scope="project") set_variable(ZIELGROESSE_UI_VAR, value, scope="project")
if self.logic: if self.logic:
self.logic.set_zielgroesse_for_auswahl(value) self.logic.set_zielgroesse_for_auswahl(value)
def _on_formfaktor_changed(self, state: int) -> None: def _on_formfaktor_changed(self, state: int) -> None:
"""Persistiert Endlosrolle-Zustand und setzt ``sn_formfaktor``.""" """Persistiert Endlosrolle-Zustand und setzt ``formfaktor``."""
checked = bool(state) checked = bool(state)
set_variable(FORMFAKTOR_UI_VAR, "Endlosrolle" if checked else "Blatt", scope="project") set_variable(FORMFAKTOR_UI_VAR, "Endlosrolle" if checked else "Blatt", scope="project")
if self.logic: if self.logic: