KBS-Umrechnung bei Zoom und Druck (Basis #99) dokumentiert
Schnittstellen Abschnitt 2a (KBS), Fallstricke, Modulkarte, Testkatalog und STATUS (Punkt 19; #104 als gemergt vermerkt). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -26,8 +26,8 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
|
||||
|---|---:|---|
|
||||
| `functions/__init__.py` | 50 | Re-Export vieler Wrapper (`from sn_basis.functions import QgsProject, info, ...`) |
|
||||
| `functions/qt_wrapper.py` ⚠ | 873 | Qt-Symbole: PyQt6 primär, PyQt5-Fallback, sonst Mock. `QT_VERSION` (0/5/6), Enum-Aliase (`DockAreaRight`, …), `exec_dialog()` |
|
||||
| `functions/qgiscore_wrapper.py` ⚠ | 1 428 | `qgis.core`-Symbole und Konstanten; ab Zeile ~255 Mock-Klassen; eigener Block für Vektorkacheln/Ausdrücke/Legende (#88); Helfer `network_head`, `get_layer_extent`, `create_buffer_layer`, `layer_exists_in_gpkg`, `polygon_zu_linie` |
|
||||
| `functions/qgisui_wrapper.py` | 271 | `iface`-Zugriffe: Hauptfenster, Docks, Menüs, Toolbars, Layoutdesigner, aktiver Layer (`get_active_layer`); Mock-`iface` |
|
||||
| `functions/qgiscore_wrapper.py` ⚠ | 1 474 | `qgis.core`-Symbole und Konstanten; ab Zeile ~255 Mock-Klassen; eigener Block für Vektorkacheln/Ausdrücke/Legende (#88); Helfer `network_head`, `get_layer_extent`, `create_buffer_layer`, `layer_exists_in_gpkg`, `polygon_zu_linie` |
|
||||
| `functions/qgisui_wrapper.py` | 292 | `iface`-Zugriffe: Hauptfenster, Docks, Menüs, Toolbars, Layoutdesigner, Zoom auf Layer (`zoom_auf_layer`), aktiver Layer (`get_active_layer`); Mock-`iface` |
|
||||
| `functions/dialog_wrapper.py` | 570 | Dialoge: `ask_yes_no`, `show_info_dialog`, `ask_text`, Überschreiben/Anhängen/Abbrechen, `ask_auswahl` (frei benannte Knöpfe), `ProgressDialog`/`create_progress_dialog`, `ask_mehrfachauswahl` (Liste mit Häkchen) |
|
||||
| `functions/message_wrapper.py` | 85 | MessageBar: `info`, `warning`, `error`, `success`, `push_message` |
|
||||
| `functions/variable_wrapper.py` | 120 | `get_variable(key, scope)`, `set_variable(...)` mit Präfix `sn_`; Mock-Speicher |
|
||||
@@ -56,10 +56,10 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
|
||||
| `modules/Datenabruf.py` ⚠ | 636 | `Datenabruf.datenabruf(...)`: WFS, ArcGIS REST, OGR laden; Raumfilter Verfahrensgebiet/Puffer/ohne |
|
||||
| `modules/LayerLoader.py` | 422 | `create_layer(provider, link, thema)`, `apply_style`, `filter_by_extent`, `filter_by_layer`, `add_to_project` |
|
||||
| `modules/Datenschreiber.py` | 448 | `schreibe_Daten(...)` in GeoPackage, `lade_Layer(...)` ins Projekt, `schreibe_log(...)` HTML-Protokoll |
|
||||
| `modules/print_logic.py` ⚠ | 1 360 | `PrintLogic`, `AtlasConfig`, `RectangleCaptureTool`: Druckbereich, Maßstab, Atlas, Layoutaufruf |
|
||||
| `modules/print_layout.py` ⚠ | 1 127 | `PrintLayout`: Layoutaufbau für § 38 / § 41 (Karte, Legende, Gitter, Schriftfeld) |
|
||||
| `modules/print_logic.py` ⚠ | 1 419 | `PrintLogic`, `AtlasConfig`, `RectangleCaptureTool`: Druckbereich, Maßstab, Atlas, Layoutaufruf |
|
||||
| `modules/print_layout.py` ⚠ | 1 137 | `PrintLayout`: Layoutaufbau für § 38 / § 41 (Karte, Legende, Gitter, Schriftfeld) |
|
||||
| `modules/print_kartenrand.py` | 284 | Kartenrand (Legenden, Quellenangabe, Kartenschild) überlappungsfrei anordnen: 1–3 Legendenspalten, Rand breiter, Seite ggf. höher (#93); Legenden-Mindestbreite 180 mm samt Listener für das Neuladen (#96) |
|
||||
| `modules/print_layout_baufreigabe.py` | 403 | Layout „Anlage zur Baufreigabe“ (feste DIN A3/A4 quer) |
|
||||
| `modules/print_layout_baufreigabe.py` | 419 | Layout „Anlage zur Baufreigabe“ (feste DIN A3/A4 quer) |
|
||||
| `modules/basemap_legende.py` | 471 | Basemap-Legende (#88): Legendenkatalog laden, Styles → Einträge, Auswahl merken, Basemap-Layer erkennen, Auswertebereich; `BasemapLegende.aktualisiere(layout)` als Einstieg |
|
||||
| `modules/basemap_kacheln.py` | 192 | Kacheln des Basemap-Layers kachelweise über `selectByGeometry` auswerten, Renderer-Styles lesen, Zoomstufen wie der QGIS-Renderer |
|
||||
| `modules/basemap_legende_layout.py` | 471 | Legendensymbole aus Projektlayer-Styles zusammensetzen (weiße Flächen mit Legendenrand, #92), leere Hilfslayer, Legendenelement „Legende Basemap“ schreiben und platzieren |
|
||||
@@ -85,7 +85,7 @@ Legende: ⚠ = über 600 Zeilen, nie komplett laden, per `grep -n "def "` navigi
|
||||
|---|---:|---|
|
||||
| `main.py` | 80 | `Verfahrensgebiet`: registriert Action (Priorität 10), erzeugt `DockWidget` mit `Pruefmanager` und `DataGrabber` |
|
||||
| `ui/dockwidget.py` | 60 | Tabs `WorkingTab`, `PrintTab`, `SettingsTab`; injiziert Services per `set_services()` |
|
||||
| `ui/tabs/working_tab.py` ⚠ | 873 | Tab „Bearbeitung“: Buttons und Handler für ALKIS/Shape laden, Gemarkungen, Flurstücke, Grenzpunkte, Beteiligung, Statistik; hält viel Ablauflogik |
|
||||
| `ui/tabs/working_tab.py` ⚠ | 820 | Tab „Bearbeitung“: Buttons und Handler für ALKIS/Shape laden, Gemarkungen, Flurstücke, Grenzpunkte, Beteiligung, Statistik; hält viel Ablauflogik |
|
||||
| `functions/verfahrensgebiet_alkis.py` | 359 | WFS-Suche `BauRaumOderBodenordnungsrecht` per Verfahrensnummer/Landkreis, `LoadStatus` |
|
||||
| `functions/verfahrensgebiet_alkis_komplett.py` ⚠ | 661 | Vollständiger Ladeablauf aus ALKIS: BROR → Gemarkungen → Flurstücke → Flächenvergleich → Detailprüfung |
|
||||
| `functions/verfahrensgebiet_shape_komplett.py` ⚠ | 978 | Ladeablauf aus Shape/ZIP (Mehrfachauswahl, `FBSchl`-Klassifikation, Abgleich mit BROR) – siehe `docs/aus_shape_laden_technisch.md` im Repo |
|
||||
@@ -139,12 +139,12 @@ Dient als **minimales Muster** für ein neues Fachplugin (Skill `sn-neues-fachpl
|
||||
| Datei | Zeilen |
|
||||
|---|---:|
|
||||
| `sn_verfahrensgebiet/functions/grenzpunkt_alkis.py` | 1 674 |
|
||||
| `sn_basis/modules/print_logic.py` | 1 360 |
|
||||
| `sn_basis/modules/print_logic.py` | 1 419 |
|
||||
| `sn_plan41/ui/tab_a_logic.py` | 1 239 |
|
||||
| `sn_basis/functions/qgiscore_wrapper.py` | 1 428 |
|
||||
| `sn_basis/modules/print_layout.py` | 1 127 |
|
||||
| `sn_basis/functions/qgiscore_wrapper.py` | 1 474 |
|
||||
| `sn_basis/modules/print_layout.py` | 1 137 |
|
||||
| `sn_verfahrensgebiet/functions/verfahrensgebiet_shape_komplett.py` | 978 |
|
||||
| `sn_verfahrensgebiet/ui/tabs/working_tab.py` | 873 |
|
||||
| `sn_verfahrensgebiet/ui/tabs/working_tab.py` | 820 |
|
||||
| `sn_verfahrensgebiet/functions/knickpunkt_pruefung.py` | 810 |
|
||||
| `sn_basis/functions/qt_wrapper.py` | 873 |
|
||||
| `sn_basis/ui/tabs/print_tab.py` | 730 |
|
||||
|
||||
@@ -46,6 +46,18 @@ Vertrag für ein Fachplugin (Muster: `Plugin_SN_Widmung/main.py`):
|
||||
`dock.widget().widget(i)` liefert den Scroll-Bereich, die Tab-Instanz ist `….widget(i).widget()`; das Eltern-Widget
|
||||
eines Tabs ist der Viewport des Scroll-Bereichs, nicht mehr das `QTabWidget`. Tabs vor `setWidget` vollständig hinzufügen.
|
||||
|
||||
## 2a. Koordinatenbezugssysteme (Basis #99)
|
||||
|
||||
- **Ausdehnungen stehen im KBS ihrer Quelle:** `layer.extent()` im Layer-KBS, `canvas.extent()` im KBS der
|
||||
Kartenansicht (`canvas.mapSettings().destinationCrs()`), Layoutkarten in `map_item.crs()`. Wer eine Ausdehnung
|
||||
weitergibt, rechnet sie mit `qgiscore_wrapper.transformiere_rechteck(rechteck, quell_crs, ziel_crs)` um.
|
||||
- **Zoom auf einen Layer:** `qgisui_wrapper.zoom_auf_layer(layer, canvas=None)` – nie `canvas.setExtent(layer.extent())`.
|
||||
- **Druck-KBS:** Die Hauptkarte der Layouts (§ 38/§ 41, Baufreigabe) steht im KBS des Verfahrensgebiet-Layers, ohne
|
||||
diesen im Projekt-KBS (`PrintLogic._druck_crs`); `create_single_page_layout`/`create_baufreigabe_layout` nehmen es
|
||||
als Parameter `crs` und setzen es vor der Ausdehnung. Alle Druckbereiche werden in dieses KBS umgerechnet.
|
||||
- **Druckrechteck:** Der Layer „Druckrechteck“ hat das KBS des Verfahrensgebiets; das in der Kartenansicht
|
||||
gezeichnete Rechteck wird vor dem Speichern umgerechnet. `druckrechteck_xmin/…` stehen im KBS dieses Layers.
|
||||
|
||||
## 3. Projektvariablen (gemeinsamer Zustand im QGIS-Projekt)
|
||||
|
||||
Zugriff nur über `sn_basis.functions.variable_wrapper.get_variable(key, scope="project")` / `set_variable(...)`.
|
||||
|
||||
@@ -75,9 +75,12 @@ spätere Phase und beginnt erst, wenn die Test-Baseline grün ist und das Projek
|
||||
Themen Farbe/Grau, Erkennung über Kachel-URL, Prüfwert für ungespeicherte Änderungen. Manueller QGIS-Test
|
||||
am 05.10.2026 bestanden (Laden über `styleUrl`, Themenwechsel per `setDataSource`, Prüfwert stabil). Folge-Issues: #101
|
||||
(Import/Export der Stile), P10 Vektor (eigenes Issue, Entwurf liegt vor), Relief.
|
||||
18. **Langer Tab verlängert das QGIS-Fenster (Basis #104).** Behoben auf `Plugin_SN_Basis:bugfix/104-dock-scrollbereich`
|
||||
(Doku: `Projektwissen:docs/104-dock-scrollbereich`), PR steht aus: jeder Tab im Scroll-Bereich über
|
||||
`BaseDockWidget.setWidget`, wirkt auch für Plan41/Verfahrensgebiet. Manueller QGIS-Test am 05.10.2026 bestanden.
|
||||
18. **Langer Tab verlängert das QGIS-Fenster (Basis #104).** Gemergt (PR #105, Doku PR #26): jeder Tab im
|
||||
Scroll-Bereich über `BaseDockWidget.setWidget`, wirkt auch für Plan41/Verfahrensgebiet.
|
||||
19. **Zoom und Drucklayout bei anderem Projekt-KBS (Basis #99).** Behoben auf `Plugin_SN_Basis:bugfix/99-druck-kbs`
|
||||
und `Plugin_SN_Verfahrensgebiet:bugfix/99-zoom-kbs` (Doku: `Projektwissen:docs/99-druck-kbs`), PRs stehen aus;
|
||||
**Basis zuerst mergen** (Verfahrensgebiet nutzt `zoom_auf_layer`). Layoutkarte im KBS des Verfahrensgebiets.
|
||||
Offen: QGIS-Test. Folge-Issue (Entwurf): Projekt-KBS prüfen und amtliches KBS nach Länderkennung vorschlagen.
|
||||
|
||||
**Hinweis zum lokalen Stand (04.09.2026):** Die Klone `Plugin_SN_Verfahrensgebiet` (4 Commits: PR #43, PR #45)
|
||||
und `Repository` (Release 26.8.4-unstable) liegen hinter `origin`. Aktualisieren mit `python scripts/hallo.py`.
|
||||
|
||||
+57
-14
File diff suppressed because one or more lines are too long
+38
-10
@@ -9,17 +9,17 @@ selbst (Docstrings) und aus der Testbaseline.
|
||||
|
||||
Stand der Baseline: `docs/status/testbaseline.json` (SHA-256 `aeabc946a7f3`)
|
||||
|
||||
Gesamt: 3 Pakete, 59 Testdateien, 716 Testfälle – 673 grün, 35 rot (Baseline), 8 übersprungen.
|
||||
Mit Beschreibung (Docstring): 571 von 716 (80 %).
|
||||
Gesamt: 3 Pakete, 60 Testdateien, 729 Testfälle – 686 grün, 35 rot (Baseline), 8 übersprungen.
|
||||
Mit Beschreibung (Docstring): 584 von 729 (80 %).
|
||||
|
||||
## Zusammenfassung
|
||||
|
||||
| Paket | Testdateien | Testfälle | grün | rot (Baseline) | übersprungen | mit Beschreibung |
|
||||
| --- | ---: | ---: | ---: | ---: | ---: | ---: |
|
||||
| `sn_basis` | 42 | 464 | 464 | 0 | 0 | 464 von 464 (100 %) |
|
||||
| `sn_verfahrensgebiet` | 12 | 208 | 166 | 34 | 8 | 106 von 208 (51 %) |
|
||||
| `sn_basis` | 43 | 475 | 475 | 0 | 0 | 475 von 475 (100 %) |
|
||||
| `sn_verfahrensgebiet` | 12 | 210 | 168 | 34 | 8 | 108 von 210 (51 %) |
|
||||
| `sn_plan41` | 5 | 44 | 43 | 1 | 0 | 1 von 44 (2 %) |
|
||||
| **Summe** | **59** | **716** | **673** | **35** | **8** | **571 von 716 (80 %)** |
|
||||
| **Summe** | **60** | **729** | **686** | **35** | **8** | **584 von 729 (80 %)** |
|
||||
|
||||
### Legende
|
||||
|
||||
@@ -31,7 +31,7 @@ Mit Beschreibung (Docstring): 571 von 716 (80 %).
|
||||
|
||||
## Paket `sn_basis`
|
||||
|
||||
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 42 Testdateien mit 464 Testfällen (464 grün, 0 rot, 0 übersprungen).
|
||||
Plattform-Plugin, Ordner `Plugin_SN_Basis` – 43 Testdateien mit 475 Testfällen (475 grün, 0 rot, 0 übersprungen).
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_base_dockwidget.py`
|
||||
|
||||
@@ -431,6 +431,31 @@ Testgruppen:
|
||||
| `DockManagerShowTests.test_fehler_beim_entfernen_wird_als_warnung_gemeldet` | Prüft, dass ein Fehler beim Entfernen alter Docks nur gewarnt und das neue Dock trotzdem angezeigt wird. | grün |
|
||||
| `DockManagerShowTests.test_fehler_beim_anzeigen_wird_gemeldet` | Prüft, dass ein Fehler beim Anzeigen des Docks als Fehler gemeldet wird. | grün |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_druck_kbs.py`
|
||||
|
||||
Worum es in der Datei geht: Tests zu Basis #99: Ist das Projekt-KBS ein anderes als das KBS des Verfahrensgebiets, müssen
|
||||
|
||||
Testgruppen:
|
||||
|
||||
- `TestTransformiereRechteck` (3 Testfälle): Umrechnung eines Rechtecks zwischen zwei KBS.
|
||||
- `TestZoomAufLayer` (2 Testfälle): Zoom der Kartenansicht auf einen Layer in einem anderen KBS.
|
||||
- `TestDruckKbs` (5 Testfälle): KBS der Layoutkarte und Umrechnung der Druckbereiche.
|
||||
- `TestLayoutkarteImDruckKbs` (1 Testfälle): Die Layoutkarte bekommt das Druck-KBS, bevor die Ausdehnung gesetzt wird.
|
||||
|
||||
| Testfall | prüft | Status |
|
||||
| --- | --- | --- |
|
||||
| `TestTransformiereRechteck.test_verschiedene_kbs_werden_umgerechnet` | Prüft, dass ein Rechteck bei verschiedenen KBS mit QgsCoordinateTransform von Quell- nach Ziel-KBS umgerechnet wird. | grün |
|
||||
| `TestTransformiereRechteck.test_gleiches_fehlendes_oder_ungueltiges_kbs_laesst_rechteck_unveraendert` | Prüft, dass bei gleichem, fehlendem oder ungültigem KBS nicht umgerechnet und das Rechteck unverändert geliefert wird. | grün |
|
||||
| `TestTransformiereRechteck.test_fehler_bei_der_umrechnung_liefert_das_rechteck` | Prüft, dass ein Fehler bei der Umrechnung nicht durchschlägt, sondern das ursprüngliche Rechteck zurückkommt. | grün |
|
||||
| `TestZoomAufLayer.test_ausdehnung_wird_ins_kbs_der_kartenansicht_umgerechnet` | Prüft, dass zoom_auf_layer die Layer-Ausdehnung vom Layer-KBS in das KBS der Kartenansicht umrechnet, bevor gezoomt wird. | grün |
|
||||
| `TestZoomAufLayer.test_ohne_layer_oder_kartenansicht_kein_zoom` | Prüft, dass zoom_auf_layer ohne Layer oder ohne Kartenansicht nichts tut und False liefert. | grün |
|
||||
| `TestDruckKbs.test_druck_kbs_ist_das_kbs_des_verfahrensgebiets` | Prüft, dass die Layoutkarte im KBS des Verfahrensgebiet-Layers steht und ohne Verfahrensgebiet das Projekt-KBS gilt. | grün |
|
||||
| `TestDruckKbs.test_kartenfenster_wird_vom_kbs_der_kartenansicht_umgerechnet` | Prüft, dass der Druckbereich „wie Kartenfenster“ vom KBS der Kartenansicht in das Druck-KBS umgerechnet wird. | grün |
|
||||
| `TestDruckKbs.test_auswahl_wird_vor_dem_puffern_vom_layer_kbs_umgerechnet` | Prüft, dass der Druckbereich „Auswahl“ aus dem KBS des Auswahl-Layers umgerechnet und erst danach gepuffert wird. | grün |
|
||||
| `TestDruckKbs.test_ohne_druck_kbs_wird_nicht_umgerechnet` | Prüft, dass _resolve_extent ohne Druck-KBS wie bisher nicht umrechnet (Aufrufe ohne den neuen Parameter). | grün |
|
||||
| `TestDruckKbs.test_druckrechteck_wird_ins_kbs_seines_layers_umgerechnet` | Prüft, dass ein in der Kartenansicht gezeichnetes Druckrechteck vor dem Speichern in das KBS des Druckrechteck-Layers umgerechnet wird. | grün |
|
||||
| `TestLayoutkarteImDruckKbs.test_hauptkarte_bekommt_das_kbs_vor_der_ausdehnung` | Prüft, dass die Hauptkarte eines neuen Layouts das Druck-KBS erhält, bevor ihre Ausdehnung gesetzt wird. | grün |
|
||||
|
||||
### `Plugin_SN_Basis/tests/test_excel_importer.py`
|
||||
|
||||
Worum es in der Datei geht: Tests für sn_basis/modules/excel_importer.py (Excel-Import für Linklisten, Issue #63).
|
||||
@@ -1028,7 +1053,7 @@ Testgruppen:
|
||||
|
||||
## Paket `sn_verfahrensgebiet`
|
||||
|
||||
Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 12 Testdateien mit 208 Testfällen (166 grün, 34 rot, 8 übersprungen).
|
||||
Fachplugin, Ordner `Plugin_SN_Verfahrensgebiet` – 12 Testdateien mit 210 Testfällen (168 grün, 34 rot, 8 übersprungen).
|
||||
|
||||
### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py`
|
||||
|
||||
@@ -1361,6 +1386,7 @@ Testgruppen:
|
||||
|
||||
- `TestWorkingTab` (24 Testfälle): — (Docstring fehlt)
|
||||
- `TestHandleVerfShape` (9 Testfälle): — (Docstring fehlt)
|
||||
- `TestZoomImProjektKbs` (2 Testfälle): Zoom auf das neue Verfahrensgebiet rechnet in das KBS der Kartenansicht um (Basis #99).
|
||||
|
||||
| Testfall | prüft | Status |
|
||||
| --- | --- | --- |
|
||||
@@ -1397,6 +1423,8 @@ Testgruppen:
|
||||
| `TestHandleVerfShape.test_bror_layer_erhaelt_qml_stil` | Wenn bror_layer zurückgegeben → BauRaumOderBodenordnungsrecht.qml angewendet. | grün |
|
||||
| `TestHandleVerfShape.test_enriched_layer_already_in_project_not_added_again` | Layer bereits im Projekt → kein erneutes addMapLayer für VG-Layer. | grün |
|
||||
| `TestHandleVerfShape.test_busy_state_set_during_execution` | Button wird während der Ausführung auf busy gesetzt. | grün |
|
||||
| `TestZoomImProjektKbs.test_alkis_zoom_ueber_zoom_auf_layer` | Prüft, dass nach dem Laden aus ALKIS über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung. | grün |
|
||||
| `TestZoomImProjektKbs.test_shape_zoom_ueber_zoom_auf_layer` | Prüft, dass nach dem Laden aus einem Shape über zoom_auf_layer auf das Verfahrensgebiet gezoomt wird und nicht mit der unumgerechneten Layer-Ausdehnung. | grün |
|
||||
|
||||
## Paket `sn_plan41`
|
||||
|
||||
@@ -1513,11 +1541,11 @@ Arbeitsliste: Diese Testfälle haben keinen Docstring; was sie fachlich prüfen,
|
||||
aus dem Quelltext erschließen. Jeder Eintrag braucht eine einzeilige Beschreibung im Testfall,
|
||||
dann verschwindet er hier von selbst.
|
||||
|
||||
### `sn_basis` – 0 von 464 Testfällen ohne Beschreibung
|
||||
### `sn_basis` – 0 von 475 Testfällen ohne Beschreibung
|
||||
|
||||
Keine Lücken.
|
||||
|
||||
### `sn_verfahrensgebiet` – 102 von 208 Testfällen ohne Beschreibung
|
||||
### `sn_verfahrensgebiet` – 102 von 210 Testfällen ohne Beschreibung
|
||||
|
||||
#### `Plugin_SN_Verfahrensgebiet/tests/test_beteiligung_pruefung.py` (25 von 25)
|
||||
|
||||
@@ -1645,7 +1673,7 @@ Keine Lücken.
|
||||
- `TestVerfahrensgebietShapeKomplett.test_punktort_ta_none_gibt_shape_vg_zurueck_und_zeigt_fehler`
|
||||
- `TestVerfahrensgebietShapeKomplett.test_temp_layer_wird_stets_entfernt`
|
||||
|
||||
#### `Plugin_SN_Verfahrensgebiet/tests/test_working_tab.py` (6 von 33) – auch der Modul-Docstring fehlt
|
||||
#### `Plugin_SN_Verfahrensgebiet/tests/test_working_tab.py` (6 von 35) – auch der Modul-Docstring fehlt
|
||||
|
||||
- `TestWorkingTab.test_set_busy_updates_button_state`
|
||||
- `TestWorkingTab.test_on_verf_layer_changed_valid_sets_variable`
|
||||
|
||||
@@ -92,6 +92,12 @@ Kurz, konkret, mit Datum und Quelle. Neue Einträge oben in der passenden Rubrik
|
||||
|
||||
## Code-Konventionen, die man kennen muss
|
||||
|
||||
- **`layer.extent()` steht im KBS des Layers, nicht im Projekt-KBS.** Solange das Projekt in EPSG:25833 steht wie
|
||||
alle sächsischen Daten, fällt das nicht auf. Mit einem anderen Projekt-KBS landen `canvas.setExtent(layer.extent())`
|
||||
und `map_item.setExtent(layer.extent())` an der falschen Stelle; die Layer selbst rendert QGIS trotzdem richtig
|
||||
(Umprojektion beim Zeichnen). Immer `zoom_auf_layer` bzw. `transformiere_rechteck` verwenden (Basis #99).
|
||||
Layoutkarten ohne `setCrs` folgen dem Projekt-KBS; Gitter (500 Karteneinheiten) und Maßstab setzen Meter voraus.
|
||||
(05.10.2026)
|
||||
- **Dock-Inhalt ohne Scroll-Bereich verlängert das QGIS-Fenster.** Qt verlangt für ein Dock mindestens die Höhe seines
|
||||
Inhalts (beim `QTabWidget`: des höchsten Tabs). Ist sie größer als der Bildschirm, wächst das Hauptfenster nach unten
|
||||
aus dem Bild, statt dass ein Scrollbalken erscheint. Abhilfe: Inhalt in `QScrollArea` mit `setWidgetResizable(True)`;
|
||||
|
||||
Reference in New Issue
Block a user