From 0828083b6667a79464ea922506b0fe2839d12439 Mon Sep 17 00:00:00 2001 From: "benjamin.jakimow@geo.hu-berlin.de" <q8DTkxUg-BB> Date: Fri, 30 Jun 2017 09:12:05 +0200 Subject: [PATCH] added utils.copyRenderer(renderer, targetLayer) to apply new renderer --- timeseriesviewer/mapcanvas.py | 24 ++++++++++-------------- timeseriesviewer/utils.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 14 deletions(-) diff --git a/timeseriesviewer/mapcanvas.py b/timeseriesviewer/mapcanvas.py index ef48d691..e75e26fd 100644 --- a/timeseriesviewer/mapcanvas.py +++ b/timeseriesviewer/mapcanvas.py @@ -94,8 +94,9 @@ class MapCanvas(QgsMapCanvas): QgsMapLayerRegistry.instance().addMapLayers(mls, False) del self.mLazyRasterSources[:] self.mLayers.extend(mls) - self.setRasterRenderer(self.mRendererRaster, refresh=False) - self.setVectorRenderer(self.mRendererVector, refresh=False) + self.setRenderer(self.mRendererVector, refresh=False) + self.setRenderer(self.mRendererRaster, refresh=False) + return self.mLayers def addLazyRasterSources(self, sources): @@ -368,18 +369,13 @@ class MapCanvas(QgsMapCanvas): SETTINGS.setValue('CANVAS_SAVE_IMG_DIR', os.path.dirname(path)) - def setRenderer(self, renderer): - #print('Set renderer {}'.format(self.objectName())) - #lyrs = [l for l in self.mapLayersToRender() if str(l.source()) == targetLayerUri] - isRasterRenderer = isinstance(renderer, QgsRasterRenderer) - if isRasterRenderer: - self.setRasterRenderer(renderer, refresh=False) - else: - self.setVectorRenderer(renderer, refresh=False) - - self.refresh() + def setRenderer(self, renderer, refresh=True): + from utils import copyRenderer + success = [copyRenderer(renderer, lyr) for lyr in self.mLayers] + if refresh and any(success): + self.refresh() - def setVectorRenderer(self, renderer, refresh=True): + def depr_setVectorRenderer(self, renderer, refresh=True): self.mRendererVector = renderer lyrs = [l for l in self.mLayers if isinstance(l, QgsVectorLayer)] for lyr in lyrs: @@ -388,7 +384,7 @@ class MapCanvas(QgsMapCanvas): if refresh: self.refresh() - def setRasterRenderer(self, renderer, refresh=False): + def depr_setRasterRenderer(self, renderer, refresh=False): self.mRendererRaster = renderer lyrs = [l for l in self.mLayers if isinstance(l, QgsRasterLayer)] for lyr in lyrs: diff --git a/timeseriesviewer/utils.py b/timeseriesviewer/utils.py index 1c222552..57f2642f 100644 --- a/timeseriesviewer/utils.py +++ b/timeseriesviewer/utils.py @@ -298,6 +298,35 @@ def filterSubLayers(filePaths, subLayerEndings): pass return results +def copyRenderer(renderer, targetLayer): + """ + Copies and applies renderer to targetLayer. + :param renderer: + :param targetLayer: + :return: True, if 'renderer' could be copied and applied to 'targetLayer' + """ + if isinstance(targetLayer, QgsRasterLayer): + if isinstance(renderer, QgsMultiBandColorRenderer): + r = renderer.clone() + r.setInput(targetLayer.dataProvider()) + targetLayer.setRenderer(r) + return True + elif isinstance(renderer, QgsSingleBandPseudoColorRenderer): + r = renderer.clone() + # r = QgsSingleBandPseudoColorRenderer(None, renderer.band(), None) + r.setInput(targetLayer.dataProvider()) + cmin = renderer.classificationMin() + cmax = renderer.classificationMax() + r.setClassificationMin(cmin) + r.setClassificationMax(cmax) + targetLayer.setRenderer(r) + return True + elif isinstance(targetLayer, QgsVectorLayer): + #todo: add render-specific switches + targetLayer.setRenderer(renderer) + return True + else: + return False def getIface(): """ -- GitLab