Skip to content

Commit 7805c64

Browse files
committed
[processing] added variables to scope when inputing value of a ParameterNumber
1 parent e55b280 commit 7805c64

File tree

1 file changed

+41
-2
lines changed

1 file changed

+41
-2
lines changed

python/plugins/processing/gui/NumberInputPanel.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,10 @@
3333

3434
from math import log10, floor
3535
from qgis.core import (QgsDataSourceURI, QgsCredentials, QgsExpressionContext,
36-
QgsExpressionContextUtils, QgsExpression)
36+
QgsExpressionContextUtils, QgsExpression, QgsRasterLayer)
3737
from qgis.gui import QgsEncodingFileDialog, QgsExpressionBuilderDialog
38+
from qgis.utils import iface
39+
from processing.tools import dataobjects
3840

3941
pluginPath = os.path.split(os.path.dirname(__file__))[0]
4042
WIDGET, BASE = uic.loadUiType(
@@ -87,7 +89,9 @@ def __init__(self, number, minimum, maximum, isInteger):
8789
def showExpressionsBuilder(self):
8890
context = QgsExpressionContext()
8991
context.appendScope(QgsExpressionContextUtils.globalScope())
90-
context.appendScope(QgsExpressionContextUtils.projectScope())
92+
scope = QgsExpressionContextUtils.projectScope()
93+
self.addVariablesToScope(scope)
94+
context.appendScope(scope)
9195
dlg = QgsExpressionBuilderDialog(None, self.spnValue.text(), self, "generic", context)
9296
dlg.setWindowTitle(self.tr("Expression based input"));
9397
if dlg.exec_() == QDialog.Accepted:
@@ -100,6 +104,41 @@ def showExpressionsBuilder(self):
100104
except:
101105
pass
102106

107+
def addVariablesToScope(self, scope):
108+
layers = dataobjects.getAllLayers()
109+
for layer in layers:
110+
name = layer.name()
111+
scope.setVariable("%s_minx" % name, layer.extent().xMinimum())
112+
scope.setVariable("%s_miny" % name, layer.extent().yMinimum())
113+
scope.setVariable("%s_maxx" % name, layer.extent().xMaximum())
114+
scope.setVariable("%s_maxy" % name, layer.extent().yMaximum())
115+
if isinstance(layer, QgsRasterLayer):
116+
cellsize = (layer.extent().xMaximum()
117+
- layer.extent().xMinimum()) / layer.width()
118+
scope.setVariable("%s_cellsize" % name, cellsize)
119+
120+
layers = dataobjects.getRasterLayers()
121+
for layer in layers:
122+
for i in range(layer.bandCount()):
123+
stats = layer.dataProvider().bandStatistics(i + 1)
124+
scope.setVariable("%s_band%i_avg" % (name, i + 1), stats.mean)
125+
scope.setVariable("%s_band%i_stddev" % (name, i + 1), stats.stdDev)
126+
scope.setVariable("%s_band%i_min" % (name, i + 1), stats.minimumValue)
127+
scope.setVariable("%s_band%i_max" % (name, i + 1), stats.maximumValue)
128+
129+
extent = iface.mapCanvas().extent()
130+
scope.setVariable("canvasextent_minx", extent.xMinimum())
131+
scope.setVariable("canvasextent_miny", extent.yMinimum())
132+
scope.setVariable("canvasextent_maxx", extent.xMaximum())
133+
scope.setVariable("canvasextent_maxy", extent.yMaximum())
134+
135+
extent = iface.mapCanvas().fullExtent()
136+
scope.setVariable("fullextent_minx", extent.xMinimum())
137+
scope.setVariable("fullextent_miny", extent.yMinimum())
138+
scope.setVariable("fullextent_maxx", extent.xMaximum())
139+
scope.setVariable("fullextent_maxy", extent.yMaximum())
140+
141+
103142
def getValue(self):
104143
return self.spnValue.value()
105144

0 commit comments

Comments
 (0)