23QString QgsMultiRingConstantBufferAlgorithm::name()
 const 
   25  return QStringLiteral( 
"multiringconstantbuffer" );
 
   28QString QgsMultiRingConstantBufferAlgorithm::displayName()
 const 
   30  return QObject::tr( 
"Multi-ring buffer (constant distance)" );
 
   33QStringList QgsMultiRingConstantBufferAlgorithm::tags()
 const 
   35  return QObject::tr( 
"buffer,grow,multiple,rings,distance,donut" ).split( 
',' );
 
   38QString QgsMultiRingConstantBufferAlgorithm::group()
 const 
   40  return QObject::tr( 
"Vector geometry" );
 
   43QString QgsMultiRingConstantBufferAlgorithm::groupId()
 const 
   45  return QStringLiteral( 
"vectorgeometry" );
 
   48QString QgsMultiRingConstantBufferAlgorithm::outputName()
 const 
   50  return QObject::tr( 
"Multi-ring buffer (constant distance)" );
 
   53QString QgsMultiRingConstantBufferAlgorithm::shortHelpString()
 const 
   55  return QObject::tr( 
"This algorithm computes multi-ring ('donuts') buffer for the features in an input layer, using a fixed or dynamic distance and number of rings." );
 
   58QString QgsMultiRingConstantBufferAlgorithm::shortDescription()
 const 
   60  return QObject::tr( 
"Computes multi-ring ('donuts') buffer using a fixed or dynamic distance and number of rings." );
 
   68QgsMultiRingConstantBufferAlgorithm *QgsMultiRingConstantBufferAlgorithm::createInstance()
 const 
   70  return new QgsMultiRingConstantBufferAlgorithm();
 
   73void QgsMultiRingConstantBufferAlgorithm::initParameters( 
const QVariantMap & )
 
   76  rings->setIsDynamic( 
true );
 
   78  rings->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
   79  addParameter( rings.release() );
 
   81  auto distance = std::make_unique<QgsProcessingParameterDistance>( QStringLiteral( 
"DISTANCE" ), QObject::tr( 
"Distance between rings" ), 1, QStringLiteral( 
"INPUT" ), 
false );
 
   82  distance->setIsDynamic( 
true );
 
   84  distance->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
   85  addParameter( distance.release() );
 
   88bool QgsMultiRingConstantBufferAlgorithm::supportInPlaceEdit( 
const QgsMapLayer *l )
 const 
   90  const QgsVectorLayer *layer = qobject_cast<const QgsVectorLayer *>( l );
 
  102  mRingsNumber = parameterAsInt( parameters, QStringLiteral( 
"RINGS" ), context );
 
  104  if ( mDynamicRingsNumber )
 
  105    mRingsNumberProperty = parameters.value( QStringLiteral( 
"RINGS" ) ).value<
QgsProperty>();
 
  107  mDistance = parameterAsDouble( parameters, QStringLiteral( 
"DISTANCE" ), context );
 
  109  if ( mDynamicDistance )
 
  110    mDistanceProperty = parameters.value( QStringLiteral( 
"DISTANCE" ) ).value<
QgsProperty>();
 
  115QgsFields QgsMultiRingConstantBufferAlgorithm::outputFields( 
const QgsFields &inputFields )
 const 
  118  newFields.
append( 
QgsField( QStringLiteral( 
"ringId" ), QMetaType::Type::Int, QString(), 10, 0 ) );
 
  119  newFields.
append( 
QgsField( QStringLiteral( 
"distance" ), QMetaType::Type::Double, QString(), 20, 6 ) );
 
  135  double currentDistance = 0;
 
  138  int rings = mRingsNumber;
 
  139  if ( mDynamicRingsNumber )
 
  142  double distance = mDistance;
 
  143  if ( mDynamicDistance )
 
  153  for ( 
int i = 1; i <= rings; ++i )
 
  156    currentDistance = i * distance;
 
  157    outputGeometry = feature.
geometry().
buffer( currentDistance, 40 );
 
  159    if ( outputGeometry.
isNull() )
 
  161      feedback->
reportError( QObject::tr( 
"Error calculating buffer for feature %1" ).arg( feature.
id() ) );
 
  165    if ( distance < 0.0 )
 
  177    previousGeometry = outputGeometry;
 
  179    attrs << i << currentDistance;
 
  181    outputs.append( out );
 
  185  if ( distance < 0.0 )
 
  192    outputs.append( out );
 
@ RegeneratesPrimaryKey
Algorithm always drops any existing primary keys or FID values and regenerates them in outputs.
 
QFlags< ProcessingAlgorithmDocumentationFlag > ProcessingAlgorithmDocumentationFlags
Flags describing algorithm behavior for documentation purposes.
 
@ SkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
 
@ MultiPolygon
MultiPolygon.
 
QFlags< ProcessingFeatureSourceFlag > ProcessingFeatureSourceFlags
Flags which control how QgsProcessingFeatureSource fetches features.
 
QFlags< SinkFlag > SinkFlags
 
@ RegeneratePrimaryKey
This flag indicates, that a primary key field cannot be guaranteed to be unique and the sink should i...
 
The feature class encapsulates a single feature including its unique ID, geometry and a list of field...
 
void setAttributes(const QgsAttributes &attrs)
Sets the feature's attributes.
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
 
Encapsulate a field in an attribute table or data source.
 
Container of fields for a vector layer.
 
bool append(const QgsField &field, Qgis::FieldOrigin origin=Qgis::FieldOrigin::Provider, int originIndex=-1)
Appends a field.
 
A geometry is the spatial representation of a feature.
 
QgsGeometry symDifference(const QgsGeometry &geometry, const QgsGeometryParameters ¶meters=QgsGeometryParameters()) const
Returns a geometry representing the points making up this geometry that do not make up other.
 
QgsGeometry buffer(double distance, int segments) const
Returns a buffer region around this geometry having the given width and with a specified number of se...
 
bool convertToMultiType()
Converts single type geometry into multitype geometry e.g.
 
Base class for all map layer types.
 
Contains information about the context in which a processing algorithm is executed.
 
QgsExpressionContext & expressionContext()
Returns the expression context.
 
bool supportInPlaceEdit(const QgsMapLayer *layer) const override
Checks whether this algorithm supports in-place editing on the given layer Default implementation for...
 
Base class for providing feedback from a processing algorithm.
 
virtual void reportError(const QString &error, bool fatalError=false)
Reports that the algorithm encountered an error while executing.
 
static bool isDynamic(const QVariantMap ¶meters, const QString &name)
Returns true if the parameter with matching name is a dynamic parameter, and must be evaluated once f...
 
static QgsFields combineFields(const QgsFields &fieldsA, const QgsFields &fieldsB, const QString &fieldsBPrefix=QString())
Combines two field lists, avoiding duplicate field names (in a case-insensitive manner).
 
Definition for a property.
 
@ IntegerPositive
Positive integer values (including 0)
 
@ DoublePositive
Positive double value (including 0)
 
A store for object properties.
 
double valueAsDouble(const QgsExpressionContext &context, double defaultValue=0.0, bool *ok=nullptr) const
Calculates the current value of the property and interprets it as a double.
 
Represents a vector layer which manages a vector based dataset.
 
Q_INVOKABLE Qgis::WkbType wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
 
QList< QgsFeature > QgsFeatureList