Skip to content

Commit 8c0c581

Browse files
committed
[processing] make multi-ring buffer parameters dynamic
1 parent 04ce435 commit 8c0c581

File tree

2 files changed

+28
-13
lines changed

2 files changed

+28
-13
lines changed

src/analysis/processing/qgsalgorithmmultiringbuffer.cpp

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,25 +61,35 @@ QgsMultiRingBufferAlgorithm *QgsMultiRingBufferAlgorithm::createInstance() const
6161

6262
void QgsMultiRingBufferAlgorithm::initParameters( const QVariantMap & )
6363
{
64-
addParameter( new QgsProcessingParameterFeatureSource( QStringLiteral( "INPUT" ), QObject::tr( "Input layer" ), QList< int >() << QgsProcessing::TypeVectorPoint ) );
65-
66-
auto ringsParam = qgis::make_unique < QgsProcessingParameterNumber >( QStringLiteral( "RINGS" ), QObject::tr( "Number of rings" ), QgsProcessingParameterNumber::Integer, 1, false, 1 );
67-
//ringsParam->setIsDynamic( true );
68-
//ringsParam->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "Number of rings" ), QObject::tr( "Number of rings" ), QgsPropertyDefinition::Integer ) );
69-
//ringsParam->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
70-
addParameter( ringsParam.release() );
71-
72-
auto distanceParam = qgis::make_unique < QgsProcessingParameterNumber >( QStringLiteral( "DISTANCE" ), QObject::tr( "Distance between rings" ), QgsProcessingParameterNumber::Double, 1 );
73-
//distanceParam->setIsDynamic( true );
74-
//distanceParam->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "Distance between rings" ), QObject::tr( "Distance between rings" ), QgsPropertyDefinition::Double ) );
75-
//distanceParam->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
76-
addParameter( distanceParam.release() );
64+
std::unique_ptr< QgsProcessingParameterNumber> rings = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral( "RINGS" ),
65+
QObject::tr( "Number of rings" ), QgsProcessingParameterNumber::Integer,
66+
1, false, 0 );
67+
rings->setIsDynamic( true );
68+
rings->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "RINGS" ), QObject::tr( "Number of rings" ), QgsPropertyDefinition::IntegerPositive ) );
69+
rings->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
70+
addParameter( rings.release() );
71+
72+
std::unique_ptr< QgsProcessingParameterNumber> distance = qgis::make_unique< QgsProcessingParameterNumber >( QStringLiteral( "DISTANCE" ),
73+
QObject::tr( "Distance between rings" ), QgsProcessingParameterNumber::Double,
74+
1, false, 0 );
75+
distance->setIsDynamic( true );
76+
distance->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "DISTANCE" ), QObject::tr( "Distance between rings" ), QgsPropertyDefinition::DoublePositive ) );
77+
distance->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
78+
addParameter( distance.release() );
7779
}
7880

7981
bool QgsMultiRingBufferAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
8082
{
8183
mRingsNumber = parameterAsInt( parameters, QStringLiteral( "RINGS" ), context );
84+
mDynamicRingsNumber = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "RINGS" ) );
85+
if ( mDynamicRingsNumber )
86+
mRingsNumberProperty = parameters.value( QStringLiteral( "RINGS" ) ).value< QgsProperty >();
87+
8288
mDistance = parameterAsDouble( parameters, QStringLiteral( "DISTANCE" ), context );
89+
mDynamicDistance = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "DISTANCE" ) );
90+
if ( mDynamicDistance )
91+
mDistanceProperty = parameters.value( QStringLiteral( "DISTANCE" ) ).value< QgsProperty >();
92+
8393
return true;
8494
}
8595

src/analysis/processing/qgsalgorithmmultiringbuffer.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,12 @@ class QgsMultiRingBufferAlgorithm : public QgsProcessingFeatureBasedAlgorithm
5454

5555
private:
5656
int mRingsNumber = 0;
57+
bool mDynamicRingsNumber = false;
58+
QgsProperty mRingsNumberProperty;
59+
5760
double mDistance = 0.0;
61+
bool mDynamicDistance = false;
62+
QgsProperty mDistanceProperty;
5863
};
5964

6065
///@endcond PRIVATE

0 commit comments

Comments
 (0)