Created
July 17, 2025 06:43
-
-
Save thbaumann/c320b33d9cef0267ac37578b75bd0e04 to your computer and use it in GitHub Desktop.
zoom to each point and wait for rendercomplete signal
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from qgis.PyQt.QtWidgets import QDockWidget, QPushButton, QVBoxLayout, QWidget | |
from qgis.PyQt.QtCore import Qt | |
from qgis.core import QgsProject, QgsPointXY | |
from qgis.utils import iface | |
# Steuerungsvariablen | |
stop_script = False | |
features = [] | |
index = 0 | |
waiting_for_render = False | |
# Layername und Maßstab | |
#layer_name = 'Dein_Punktlayername' # ← Hier ggf den exakten Layernamen eintragen, wenn nicht der active layer benutzt wird | |
scale = 500 | |
def start_zoom(): | |
global stop_script, features, index | |
stop_script = False | |
index = 0 | |
# Layer suchen | |
######### man kann auch über den Layernamen gehen... | |
#layers = QgsProject.instance().mapLayersByName(layer_name) | |
#if not layers: | |
# print(f"❌ Layer '{layer_name}' nicht gefunden!") | |
# return | |
#layer = layers[0] | |
####################### | |
layer =iface.activeLayer() # ich geh lieber ueber den aktiven layer | |
features.clear() | |
features.extend(layer.getFeatures()) | |
# Signal verbinden | |
try: | |
iface.mapCanvas().renderComplete.disconnect(on_render_complete) | |
except TypeError: | |
pass # Falls vorher nicht verbunden | |
iface.mapCanvas().renderComplete.connect(on_render_complete) | |
zoom_next() | |
def stop_zoom(): | |
global stop_script | |
stop_script = True | |
try: | |
iface.mapCanvas().renderComplete.disconnect(on_render_complete) | |
except TypeError: | |
pass # Signal war nicht verbunden | |
print("⏹️ Zoom-Vorgang gestoppt.") | |
def zoom_next(): | |
global index, features, stop_script, waiting_for_render | |
if stop_script or index >= len(features): | |
print("✅ Fertig oder abgebrochen.") | |
try: | |
iface.mapCanvas().renderComplete.disconnect(on_render_complete) | |
except TypeError: | |
pass | |
return | |
feature = features[index] | |
point = feature.geometry().asPoint() | |
iface.mapCanvas().setCenter(QgsPointXY(point)) | |
iface.mapCanvas().zoomScale(scale) | |
iface.mapCanvas().refresh() | |
waiting_for_render = True | |
def on_render_complete(painter): | |
global index, waiting_for_render | |
if waiting_for_render: | |
waiting_for_render = False | |
index += 1 | |
zoom_next() | |
# Dock-Widget mit Buttons | |
dock = QDockWidget("🔍 Punkt-Zoom-Steuerung", iface.mainWindow()) | |
widget = QWidget() | |
layout = QVBoxLayout() | |
btn_start = QPushButton("▶️ Start") | |
btn_start.clicked.connect(start_zoom) | |
layout.addWidget(btn_start) | |
btn_stop = QPushButton("⏹️ Stopp") | |
btn_stop.clicked.connect(stop_zoom) | |
layout.addWidget(btn_stop) | |
widget.setLayout(layout) | |
dock.setWidget(widget) | |
iface.addDockWidget(Qt.LeftDockWidgetArea, dock) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment