forked from Daniel/Plugin_SN_Plan41
84 lines
3.0 KiB
Python
84 lines
3.0 KiB
Python
"""
|
||
sn_plan41/ui/tab_b_logic.py – Fachlogik für Tab B (Druck)
|
||
"""
|
||
from __future__ import annotations
|
||
from sn_basis.functions.variable_wrapper import set_variable
|
||
from sn_basis.modules.Pruefmanager import Pruefmanager
|
||
|
||
|
||
KARTENNAME_VAR = "sn_kartenname"
|
||
PLOTMASSSTAB_VAR = "sn_plotmassstab"
|
||
VIEW_VAR = "sn_view"
|
||
ZIELGROESSE_VAR = "sn_zielgroesse"
|
||
FORMFAKTOR_VAR = "sn_formfaktor"
|
||
KARTENNAME_38 = "§38"
|
||
KARTENNAME_41 = "§41"
|
||
MASSSTAB_WIE_KARTENFENSTER = "Wie Kartenfenster"
|
||
THEMA_WIE_KARTENFENSTER = "wie kartenfenster"
|
||
|
||
KARTENNAME_BY_AUSWAHL = {
|
||
KARTENNAME_38: "Planungsübersicht §38 FlurbG",
|
||
KARTENNAME_41: "Karte zum Plan über die gemeinschaftlichen und öffentlichen Anlagen (§ 41 FlurbG)",
|
||
}
|
||
|
||
PLOTMASSSTAB_BY_AUSWAHL = {
|
||
"1:5.000": "5000",
|
||
"1:10.000": "10000",
|
||
"1:15.000": "15000",
|
||
"1:20.000": "20000",
|
||
"1:25.000": "25000",
|
||
"1:50.000": "50000",
|
||
"1:100.000": "100000",
|
||
}
|
||
|
||
# Breite x Höhe in mm (Hochformat, DIN-Standard)
|
||
DIN_GROESSEN: dict[str, tuple[int, int]] = {
|
||
"DIN A0": (841, 1189),
|
||
"DIN A1": (594, 841),
|
||
"DIN A2": (420, 594),
|
||
"DIN A3": (297, 420),
|
||
"DIN A4": (210, 297),
|
||
}
|
||
DIN_STANDARD = "DIN A0"
|
||
|
||
class TabBLogic:
|
||
"""
|
||
Kapselt die Fachlogik von Tab B.
|
||
"""
|
||
|
||
def __init__(self, pruefmanager: Pruefmanager) -> None:
|
||
self.pruefmanager = pruefmanager
|
||
|
||
def set_kartenname_for_auswahl(self, auswahl: str) -> None:
|
||
"""Setzt die Projektvariable ``sn_kartenname`` anhand der Kartennamen-Auswahl."""
|
||
kartenname = KARTENNAME_BY_AUSWAHL.get(auswahl, "")
|
||
set_variable(KARTENNAME_VAR, kartenname, scope="project")
|
||
|
||
def set_plotmassstab_for_auswahl(self, auswahl: str, aktueller_massstab: float | None = None) -> None:
|
||
"""Setzt die Projektvariable ``sn_plotmassstab`` anhand der Maßstabsauswahl."""
|
||
if auswahl == MASSSTAB_WIE_KARTENFENSTER:
|
||
if aktueller_massstab and aktueller_massstab > 0:
|
||
set_variable(PLOTMASSSTAB_VAR, str(int(round(aktueller_massstab))), scope="project")
|
||
else:
|
||
set_variable(PLOTMASSSTAB_VAR, "", scope="project")
|
||
return
|
||
|
||
value = PLOTMASSSTAB_BY_AUSWAHL.get(auswahl, "")
|
||
set_variable(PLOTMASSSTAB_VAR, value, scope="project")
|
||
|
||
def set_view_for_auswahl(self, auswahl: str) -> None:
|
||
"""Setzt ``sn_view`` auf ``aktuell`` oder den Namen des gewählten Layerthemas."""
|
||
if auswahl == THEMA_WIE_KARTENFENSTER:
|
||
set_variable(VIEW_VAR, "aktuell", scope="project")
|
||
return
|
||
|
||
set_variable(VIEW_VAR, auswahl or "", scope="project")
|
||
|
||
def set_zielgroesse_for_auswahl(self, auswahl: str) -> None:
|
||
"""Setzt ``sn_zielgroesse`` auf den gewählten DIN-Namen."""
|
||
set_variable(ZIELGROESSE_VAR, auswahl if auswahl in DIN_GROESSEN else DIN_STANDARD, scope="project")
|
||
|
||
def set_formfaktor(self, endlosrolle: bool) -> None:
|
||
"""Setzt ``sn_formfaktor`` auf ``Endlosrolle`` oder ``Blatt``."""
|
||
set_variable(FORMFAKTOR_VAR, "Endlosrolle" if endlosrolle else "Blatt", scope="project")
|
||
|