Schilder setzen wie im Browser: Palette und zwei Kartenwerkzeuge
Bisher konnte man die Zeichen in QGIS nur sehen und ihre Attribute von Hand tippen. Jetzt gibt es dieselbe Bedienung wie im Web (Erik, 21.09.2026; Nutzerkreis sind TG-Mitarbeiter und der Landkreis): * Neues Modul zeichen_werkzeug.py mit der Palette (Suchfeld nach Nummer oder Name, Kategorie, Kacheln aus den lokal abgelegten Vorschaubildern, Deckel bei 96 wie im Browser) und zwei Kartenwerkzeugen: "Schild setzen" (erster Klick Standort, zweiter Klick Blickrichtung; unter 0,5 m bleibt die Drehung 0) und "Zusatzzeichen" (Klick auf ein vorhandenes Schild haengt es darunter, kein Doppel, hoechstens zwei). * Die Rechenregeln sind Zwillinge von vz_geom.js (vzRichtungGrad, vzNormGrad, vzZusatzErgaenzen) -- dieselben Werte, hier in Python, mit denselben Pruefpunkten. * Zeichen am Weg eines Blattes brauchen ein Blatt: die Auswahl fuellt sich aus den geladenen Blatt-Layern, eine eigene Abfrage braucht es nicht. In der Verfahrenskarte bleibt sie leer. * Seitenleiste: neue Gruppe "Verkehrszeichen setzen". Der Katalog kommt beim Start und nach dem Anmelden in die Palette (oeffentlich, faellt auf die lokale Ablage zurueck). Neuer Test tools/headless_zeichen_test.py (QGIS 4.2 offscreen, ohne Zugangsschluessel): 30 Pruefungen gruen -- Rechenregeln, zusatz aus Text, Katalog, lokale Ablage, Umschreiben des Stils, Palette mit Suche und Deckel. tools/headless_panel_test.py bleibt gruen; die Leiste ist jetzt 1372 px hoch und rollt. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+65
-1
@@ -69,6 +69,7 @@ class VlnPanel(QDockWidget):
|
||||
aussen.addWidget(self._bau_anmeldung())
|
||||
aussen.addWidget(self._bau_verfahren())
|
||||
aussen.addWidget(self._bau_layer())
|
||||
aussen.addWidget(self._bau_zeichen())
|
||||
aussen.addWidget(self._bau_dienste())
|
||||
aussen.addWidget(self._bau_darstellung())
|
||||
aussen.addStretch(1)
|
||||
@@ -150,7 +151,7 @@ class VlnPanel(QDockWidget):
|
||||
("Vorerhebung", "Vorerhebung"),
|
||||
("Maßnahmenblätter", "Maßnahmenblätter (mit Zeichen am Weg)"),
|
||||
("Widmungen & Verkehrszeichen",
|
||||
"Widmungen & Verkehrszeichen")):
|
||||
"Widmungen && Verkehrszeichen")):
|
||||
haken = QCheckBox(beschriftung)
|
||||
haken.setChecked(True)
|
||||
lage.addWidget(haken)
|
||||
@@ -173,6 +174,68 @@ class VlnPanel(QDockWidget):
|
||||
"jede Änderung sofort zurück.")))
|
||||
return kasten
|
||||
|
||||
def _bau_zeichen(self):
|
||||
"""Verkehrszeichen setzen — Palette, Blattwahl, zwei Werkzeuge.
|
||||
|
||||
Die Bedienung ist dieselbe wie im Browser: erst ein Schild waehlen, dann in der Karte
|
||||
zwei Klicks (Standort, Blickrichtung). Das Blatt braucht nur, wer Zeichen am Weg eines
|
||||
Massnahmenblatts setzt — in der Verfahrenskarte bleibt die Auswahl leer.
|
||||
"""
|
||||
from .zeichen_werkzeug import ZeichenPalette
|
||||
|
||||
kasten = QGroupBox("Verkehrszeichen setzen")
|
||||
lage = QVBoxLayout(kasten)
|
||||
lage.setSpacing(6)
|
||||
lage.addWidget(_klein(QLabel("Schild waehlen, dann in der Karte: erster Klick Standort, "
|
||||
"zweiter Klick Blickrichtung.")))
|
||||
self.palette = ZeichenPalette()
|
||||
lage.addWidget(self.palette)
|
||||
lage.addWidget(_klein(QLabel("Blatt (nur fuer Zeichen am Weg):")))
|
||||
self.blatt_combo = QComboBox()
|
||||
self.blatt_combo.setToolTip("An welches Massnahmenblatt das Zeichen gehoert")
|
||||
self.blatt_combo.addItem("— kein Blatt (Verfahrenskarte) —", None)
|
||||
lage.addWidget(self.blatt_combo)
|
||||
zeile = QHBoxLayout()
|
||||
self.schild_knopf = QPushButton("Schild setzen")
|
||||
self.schild_knopf.setCheckable(True)
|
||||
self.schild_knopf.setToolTip("Zwei Klicks in der Karte: Standort, dann Blickrichtung")
|
||||
self.schild_knopf.clicked.connect(lambda: self._ruf("zeichen_setzen"))
|
||||
self.zusatz_knopf = QPushButton("Zusatzzeichen")
|
||||
self.zusatz_knopf.setCheckable(True)
|
||||
self.zusatz_knopf.setToolTip("Gewaehltes Zusatzzeichen an ein vorhandenes Schild haengen")
|
||||
self.zusatz_knopf.clicked.connect(lambda: self._ruf("zusatz_anhaengen"))
|
||||
zeile.addWidget(self.schild_knopf)
|
||||
zeile.addWidget(self.zusatz_knopf)
|
||||
lage.addLayout(zeile)
|
||||
return kasten
|
||||
|
||||
def setze_blaetter(self, blaetter):
|
||||
"""Die Auswahl der Blaetter fuellen — ``[(Beschriftung, uuid)]``."""
|
||||
vorher = self.blatt_combo.currentData()
|
||||
self.blatt_combo.blockSignals(True)
|
||||
self.blatt_combo.clear()
|
||||
self.blatt_combo.addItem("— kein Blatt (Verfahrenskarte) —", None)
|
||||
for text, uuid_ in blaetter or []:
|
||||
self.blatt_combo.addItem(text, uuid_)
|
||||
if vorher:
|
||||
i = self.blatt_combo.findData(vorher)
|
||||
if i >= 0:
|
||||
self.blatt_combo.setCurrentIndex(i)
|
||||
self.blatt_combo.blockSignals(False)
|
||||
|
||||
def aktuelles_blatt(self):
|
||||
return self.blatt_combo.currentData()
|
||||
|
||||
def aktueller_zeichencode(self):
|
||||
return str((self.palette.aktueller_eintrag() or {}).get("code") or "")
|
||||
|
||||
def werkzeug_zuruecksetzen(self):
|
||||
"""Beide Werkzeugknoepfe ausrasten (wenn QGIS das Werkzeug wechselt)."""
|
||||
for knopf in (self.schild_knopf, self.zusatz_knopf):
|
||||
knopf.blockSignals(True)
|
||||
knopf.setChecked(False)
|
||||
knopf.blockSignals(False)
|
||||
|
||||
def _bau_dienste(self):
|
||||
"""Die Linkliste des gewählten Verfahrens — vierstufig gepflegt, hier nur geladen.
|
||||
|
||||
@@ -267,6 +330,7 @@ class VlnPanel(QDockWidget):
|
||||
self.login_knopf.setVisible(not angemeldet)
|
||||
self.logout_knopf.setVisible(angemeldet)
|
||||
for widget in (self.filter_feld, self.combo, self.ogc_knopf, self.speichern_knopf,
|
||||
self.schild_knopf, self.zusatz_knopf, self.palette, self.blatt_combo,
|
||||
self.stil_knopf, self.vorlage_haken, self.dienste_holen_knopf,
|
||||
self.dienste_laden_knopf, self.dienste_alle, self.dienste_liste,
|
||||
*self.gruppen_haken.values()):
|
||||
|
||||
Reference in New Issue
Block a user