Skip to content

Commit 8c9147e

Browse files
committed
[processing] Make set m value accept dynamic m values
1 parent c5f6535 commit 8c9147e

File tree

1 file changed

+17
-3
lines changed

1 file changed

+17
-3
lines changed

python/plugins/processing/algs/qgis/SetMValue.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929

3030
from qgis.core import (QgsGeometry,
3131
QgsWkbTypes,
32+
QgsPropertyDefinition,
33+
QgsProcessingParameters,
3234
QgsProcessingParameterNumber)
3335

3436

@@ -47,6 +49,8 @@ def group(self):
4749
def __init__(self):
4850
super().__init__()
4951
self.m_value = 0
52+
self.dynamic_m = False
53+
self.m_property = None
5054

5155
def name(self):
5256
return 'setmvalue'
@@ -61,14 +65,21 @@ def tags(self):
6165
return self.tr('set,add,m,measure,values').split(',')
6266

6367
def initParameters(self, config=None):
64-
self.addParameter(QgsProcessingParameterNumber(self.M_VALUE,
65-
self.tr('M Value'), QgsProcessingParameterNumber.Double, defaultValue=0.0))
68+
m_param = QgsProcessingParameterNumber(self.M_VALUE,
69+
self.tr('M Value'), QgsProcessingParameterNumber.Double, defaultValue=0.0)
70+
m_param.setIsDynamic(True)
71+
m_param.setDynamicLayerParameterName('INPUT')
72+
m_param.setDynamicPropertyDefinition(QgsPropertyDefinition(self.M_VALUE, self.tr("M Value"), QgsPropertyDefinition.Double))
73+
self.addParameter(m_param)
6674

6775
def outputWkbType(self, inputWkb):
6876
return QgsWkbTypes.addM(inputWkb)
6977

7078
def prepareAlgorithm(self, parameters, context, feedback):
7179
self.m_value = self.parameterAsDouble(parameters, self.M_VALUE, context)
80+
self.dynamic_m = QgsProcessingParameters.isDynamic(parameters, self.M_VALUE)
81+
if self.dynamic_m:
82+
self.m_property = parameters[self.M_VALUE]
7283
return True
7384

7485
def processFeature(self, feature, context, feedback):
@@ -79,7 +90,10 @@ def processFeature(self, feature, context, feedback):
7990
# addMValue won't alter existing M values, so drop them first
8091
new_geom.dropMValue()
8192

82-
new_geom.addMValue(self.m_value)
93+
m = self.m_value
94+
if self.dynamic_m:
95+
m, ok = self.m_property.valueAsDouble(context.expressionContext(), m)
96+
new_geom.addMValue(m)
8397

8498
feature.setGeometry(QgsGeometry(new_geom))
8599

0 commit comments

Comments
 (0)