2929
3030from 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