@@ -67,35 +67,86 @@ QgsSnapToGridAlgorithm *QgsSnapToGridAlgorithm::createInstance() const
67
67
68
68
void QgsSnapToGridAlgorithm::initParameters ( const QVariantMap & )
69
69
{
70
- addParameter ( new QgsProcessingParameterNumber ( QStringLiteral ( " HSPACING" ),
71
- QObject::tr ( " X Grid Spacing" ), QgsProcessingParameterNumber::Double,
72
- 1 , false , 0 ) );
73
- addParameter ( new QgsProcessingParameterNumber ( QStringLiteral ( " VSPACING" ),
74
- QObject::tr ( " Y Grid Spacing" ), QgsProcessingParameterNumber::Double,
75
- 1 , false , 0 ) );
76
- addParameter ( new QgsProcessingParameterNumber ( QStringLiteral ( " ZSPACING" ),
77
- QObject::tr ( " Z Grid Spacing" ), QgsProcessingParameterNumber::Double,
78
- 0 , false , 0 ) );
79
- addParameter ( new QgsProcessingParameterNumber ( QStringLiteral ( " MSPACING" ),
80
- QObject::tr ( " M Grid Spacing" ), QgsProcessingParameterNumber::Double,
81
- 0 , false , 0 ) );
70
+ std::unique_ptr< QgsProcessingParameterNumber> hSpacing = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral ( " HSPACING" ),
71
+ QObject::tr ( " X Grid Spacing" ), QgsProcessingParameterNumber::Double,
72
+ 1 , false , 0 );
73
+ hSpacing->setIsDynamic ( true );
74
+ hSpacing->setDynamicPropertyDefinition ( QgsPropertyDefinition ( QStringLiteral ( " HSPACING" ), QObject::tr ( " X Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
75
+ hSpacing->setDynamicLayerParameterName ( QStringLiteral ( " INPUT" ) );
76
+ addParameter ( hSpacing.release () );
77
+
78
+ std::unique_ptr< QgsProcessingParameterNumber> vSpacing = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral ( " VSPACING" ),
79
+ QObject::tr ( " Y Grid Spacing" ), QgsProcessingParameterNumber::Double,
80
+ 1 , false , 0 );
81
+ vSpacing->setIsDynamic ( true );
82
+ vSpacing->setDynamicPropertyDefinition ( QgsPropertyDefinition ( QStringLiteral ( " VSPACING" ), QObject::tr ( " Y Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
83
+ vSpacing->setDynamicLayerParameterName ( QStringLiteral ( " INPUT" ) );
84
+ addParameter ( vSpacing.release () );
85
+
86
+ std::unique_ptr< QgsProcessingParameterNumber > zSpacing = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral ( " ZSPACING" ),
87
+ QObject::tr ( " Z Grid Spacing" ), QgsProcessingParameterNumber::Double,
88
+ 0 , false , 0 );
89
+ zSpacing->setIsDynamic ( true );
90
+ zSpacing->setDynamicPropertyDefinition ( QgsPropertyDefinition ( QStringLiteral ( " ZSPACING" ), QObject::tr ( " Z Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
91
+ zSpacing->setDynamicLayerParameterName ( QStringLiteral ( " INPUT" ) );
92
+ addParameter ( zSpacing.release () );
93
+
94
+ std::unique_ptr< QgsProcessingParameterNumber > mSpacing = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral ( " MSPACING" ),
95
+ QObject::tr ( " M Grid Spacing" ), QgsProcessingParameterNumber::Double,
96
+ 0 , false , 0 );
97
+ mSpacing ->setIsDynamic ( true );
98
+ mSpacing ->setDynamicPropertyDefinition ( QgsPropertyDefinition ( QStringLiteral ( " MSPACING" ), QObject::tr ( " M Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
99
+ mSpacing ->setDynamicLayerParameterName ( QStringLiteral ( " INPUT" ) );
100
+ addParameter ( mSpacing .release () );
82
101
}
83
102
84
103
bool QgsSnapToGridAlgorithm::prepareAlgorithm ( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback * )
85
104
{
86
105
mIntervalX = parameterAsDouble ( parameters, QStringLiteral ( " HSPACING" ), context );
106
+ mDynamicIntervalX = QgsProcessingParameters::isDynamic ( parameters, QStringLiteral ( " HSPACING" ) );
107
+ if ( mDynamicIntervalX )
108
+ mIntervalXProperty = parameters.value ( QStringLiteral ( " HSPACING" ) ).value < QgsProperty >();
109
+
87
110
mIntervalY = parameterAsDouble ( parameters, QStringLiteral ( " VSPACING" ), context );
111
+ mDynamicIntervalY = QgsProcessingParameters::isDynamic ( parameters, QStringLiteral ( " VSPACING" ) );
112
+ if ( mDynamicIntervalY )
113
+ mIntervalYProperty = parameters.value ( QStringLiteral ( " VSPACING" ) ).value < QgsProperty >();
114
+
88
115
mIntervalZ = parameterAsDouble ( parameters, QStringLiteral ( " ZSPACING" ), context );
116
+ mDynamicIntervalZ = QgsProcessingParameters::isDynamic ( parameters, QStringLiteral ( " ZSPACING" ) );
117
+ if ( mDynamicIntervalZ )
118
+ mIntervalZProperty = parameters.value ( QStringLiteral ( " ZSPACING" ) ).value < QgsProperty >();
119
+
89
120
mIntervalM = parameterAsDouble ( parameters, QStringLiteral ( " MSPACING" ), context );
121
+ mDynamicIntervalM = QgsProcessingParameters::isDynamic ( parameters, QStringLiteral ( " MSPACING" ) );
122
+ if ( mDynamicIntervalM )
123
+ mIntervalMProperty = parameters.value ( QStringLiteral ( " MSPACING" ) ).value < QgsProperty >();
124
+
90
125
return true ;
91
126
}
92
127
93
- QgsFeatureList QgsSnapToGridAlgorithm::processFeature ( const QgsFeature &feature, QgsProcessingContext &, QgsProcessingFeedback *feedback )
128
+ QgsFeatureList QgsSnapToGridAlgorithm::processFeature ( const QgsFeature &feature, QgsProcessingContext &context , QgsProcessingFeedback *feedback )
94
129
{
95
130
QgsFeature f = feature;
96
131
if ( f.hasGeometry () )
97
132
{
98
- QgsGeometry outputGeometry = f.geometry ().snappedToGrid ( mIntervalX , mIntervalY , mIntervalZ , mIntervalM );
133
+ double intervalX = mIntervalX ;
134
+ if ( mDynamicIntervalX )
135
+ intervalX = mIntervalXProperty .valueAsDouble ( context.expressionContext (), intervalX );
136
+
137
+ double intervalY = mIntervalY ;
138
+ if ( mDynamicIntervalY )
139
+ intervalY = mIntervalYProperty .valueAsDouble ( context.expressionContext (), intervalY );
140
+
141
+ double intervalZ = mIntervalZ ;
142
+ if ( mDynamicIntervalZ )
143
+ intervalZ = mIntervalZProperty .valueAsDouble ( context.expressionContext (), intervalZ );
144
+
145
+ double intervalM = mIntervalM ;
146
+ if ( mDynamicIntervalM )
147
+ intervalM = mIntervalMProperty .valueAsDouble ( context.expressionContext (), intervalM );
148
+
149
+ QgsGeometry outputGeometry = f.geometry ().snappedToGrid ( intervalX, intervalY, intervalZ, intervalM );
99
150
if ( !outputGeometry )
100
151
{
101
152
feedback->reportError ( QObject::tr ( " Error snapping geometry %1" ).arg ( feature.id () ) );
0 commit comments