From ca6b663857efd87bbb6a42141e16d49ca61d3bdf Mon Sep 17 00:00:00 2001 From: "benjamin.jakimow" <benjamin.jakimow@geo.hu-berlin.de> Date: Wed, 30 May 2018 15:11:32 +0200 Subject: [PATCH] added @qgsfunctions plotStyleSymbolFillColor and plotStyleSymbol. this allows to synchronize th eplot visualization with the layer visualization of the Spectral Library --- timeseriesviewer/mapvisualization.py | 6 +++ timeseriesviewer/plotstyling.py | 7 +++ timeseriesviewer/spectrallibraries.py | 63 ++++++++++++++++++++++++--- 3 files changed, 70 insertions(+), 6 deletions(-) diff --git a/timeseriesviewer/mapvisualization.py b/timeseriesviewer/mapvisualization.py index f46ba9ac..61cc67ab 100644 --- a/timeseriesviewer/mapvisualization.py +++ b/timeseriesviewer/mapvisualization.py @@ -1083,6 +1083,10 @@ class MapView(QObject): def setVectorLayerStyle(self, *args): if isinstance(self.mVectorLayer, QgsVectorLayer): d = QgsRendererPropertiesDialog(self.mVectorLayer, QgsStyle.defaultStyle()) + + mc = self.mapCanvases() + if len(mc) > 0: + d.setMapCanvas(mc[0]) d.exec_() s = "" @@ -1737,6 +1741,8 @@ class DatumView(QObject): mapCanvas.setTSD(self.TSD) self.registerMapCanvas(mapView, mapCanvas) + + # register MapCanvas on MV level mapView.registerMapCanvas(self.mSensor, mapCanvas) # register MapCanvas on STV level diff --git a/timeseriesviewer/plotstyling.py b/timeseriesviewer/plotstyling.py index 8ae9e319..74000224 100644 --- a/timeseriesviewer/plotstyling.py +++ b/timeseriesviewer/plotstyling.py @@ -46,6 +46,13 @@ MARKERSYMBOLS = [Option('o', u'Circle'), Option(None, u'No Symbol') ] +MARKERSYMBOLS2QGIS_SYMBOLS = dict() +for o in MARKERSYMBOLS: + name = o.name() + name = name.replace(' ','_') + name = name.lower() + MARKERSYMBOLS2QGIS_SYMBOLS[o.value()] = name + PENSTYLES = [Option(Qt.SolidLine, '___'), Option(Qt.DashLine, '_ _ _'), Option(Qt.DotLine, '. . .'), diff --git a/timeseriesviewer/spectrallibraries.py b/timeseriesviewer/spectrallibraries.py index c43807b2..3a3b0203 100644 --- a/timeseriesviewer/spectrallibraries.py +++ b/timeseriesviewer/spectrallibraries.py @@ -24,6 +24,7 @@ import os, re, tempfile, pickle, copy, shutil, locale from collections import OrderedDict from qgis.core import * from qgis.gui import * +from qgis.utils import qgsfunction from qgis.PyQt.QtCore import * from qgis.PyQt.QtGui import * from qgis.PyQt.QtWidgets import * @@ -39,7 +40,7 @@ from osgeo import gdal, gdal_array from timeseriesviewer.utils import * from timeseriesviewer.virtualrasters import * from timeseriesviewer.models import * -from timeseriesviewer.plotstyling import PlotStyle, PlotStyleDialog +from timeseriesviewer.plotstyling import PlotStyle, PlotStyleDialog, MARKERSYMBOLS2QGIS_SYMBOLS import timeseriesviewer.mimedata as mimedata FILTERS = 'ENVI Spectral Library (*.esl *.sli);;CSV Table (*.csv)' @@ -76,6 +77,50 @@ def gdalDataset(pathOrDataset, eAccess=gdal.GA_ReadOnly): return pathOrDataset + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbolFillColor(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + r,g,b,a = style.markerBrush.color().getRgb() + return '{},{},{},{}'.format(r,g,b, a) + + return None + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbol(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + symbol = style.markerSymbol + + qgisSymbolString = MARKERSYMBOLS2QGIS_SYMBOLS.get(symbol) + if isinstance(qgisSymbolString, str): + return qgisSymbolString + + return None + +@qgsfunction(0, "Spectral Libraries") +def plotStyleSymbolSize(values, feature, parent): + if isinstance(feature, QgsFeature): + i = feature.fieldNameIndex(HIDDEN_ATTRIBUTE_PREFIX+'style') + if i >= 0: + style = pickle.loads(feature.attribute(i)) + if isinstance(style, PlotStyle): + return style.markerSize + return None + + +QgsExpression.registerFunction(plotStyleSymbolFillColor) +QgsExpression.registerFunction(plotStyleSymbol) +QgsExpression.registerFunction(plotStyleSymbolSize) + + #Lookup table for ENVI IDL DataTypes to GDAL Data Types LUT_IDL2GDAL = {1:gdal.GDT_Byte, 12:gdal.GDT_UInt16, @@ -350,10 +395,15 @@ class SpectralLibraryTableView(QgsAttributeTableView): assert isinstance(menu, QMenu) assert isinstance(index, QModelIndex) - featureIDs = self.mSelectionManager.selectedFeatureIds() - featureIndices = self.fidsToIndices(featureIDs) - if not isinstance(featureIDs, list): - s = "" + featureIDs = self.spectralLibrary().selectedFeatureIds() + + if len(featureIDs) == 0 and index.isValid(): + if isinstance(self.model(), QgsAttributeTableFilterModel): + index = self.model().mapToSource(index) + if index.isValid(): + featureIDs.append(self.model().sourceModel().feature(index).id()) + elif isinstance(self.model(), QgsAttributeTableFilterModel): + featureIDs.append(self.model().feature(index).id()) @@ -434,7 +484,8 @@ class SpectralLibraryTableView(QgsAttributeTableView): refProfile = profiles[0] styleDefault = refProfile.style() refStyle = PlotStyleDialog.getPlotStyle(plotStyle=styleDefault) - refProfile.setStyle(refStyle) + if isinstance(refStyle, PlotStyle): + refProfile.setStyle(refStyle) iStyle = speclib.fields().indexFromName(HIDDEN_ATTRIBUTE_PREFIX+'style') assert iStyle >= 0 -- GitLab