24QString QgsBufferAlgorithm::name()
 const 
   26  return QStringLiteral( 
"buffer" );
 
   29QString QgsBufferAlgorithm::displayName()
 const 
   31  return QObject::tr( 
"Buffer" );
 
   34QStringList QgsBufferAlgorithm::tags()
 const 
   36  return QObject::tr( 
"buffer,grow,fixed,variable,distance" ).split( 
',' );
 
   39QString QgsBufferAlgorithm::group()
 const 
   41  return QObject::tr( 
"Vector geometry" );
 
   44QString QgsBufferAlgorithm::groupId()
 const 
   46  return QStringLiteral( 
"vectorgeometry" );
 
   49void QgsBufferAlgorithm::initAlgorithm( 
const QVariantMap & )
 
   53  auto bufferParam = std::make_unique<QgsProcessingParameterDistance>( QStringLiteral( 
"DISTANCE" ), QObject::tr( 
"Distance" ), 10, QStringLiteral( 
"INPUT" ) );
 
   54  bufferParam->setIsDynamic( 
true );
 
   56  bufferParam->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
   57  addParameter( bufferParam.release() );
 
   59  segmentParam->setHelp( QObject::tr( 
"The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets." ) );
 
   60  addParameter( segmentParam.release() );
 
   61  addParameter( 
new QgsProcessingParameterEnum( QStringLiteral( 
"END_CAP_STYLE" ), QObject::tr( 
"End cap style" ), QStringList() << QObject::tr( 
"Round" ) << QObject::tr( 
"Flat" ) << QObject::tr( 
"Square" ), 
false, 0 ) );
 
   62  addParameter( 
new QgsProcessingParameterEnum( QStringLiteral( 
"JOIN_STYLE" ), QObject::tr( 
"Join style" ), QStringList() << QObject::tr( 
"Round" ) << QObject::tr( 
"Miter" ) << QObject::tr( 
"Bevel" ), 
false, 0 ) );
 
   67  auto keepDisjointParam = std::make_unique<QgsProcessingParameterBoolean>( QStringLiteral( 
"SEPARATE_DISJOINT" ), QObject::tr( 
"Keep disjoint results separate" ), 
false );
 
   69  keepDisjointParam->setHelp( QObject::tr( 
"If checked, then any disjoint parts in the buffer results will be output as separate single-part features." ) );
 
   70  addParameter( keepDisjointParam.release() );
 
   75QString QgsBufferAlgorithm::shortHelpString()
 const 
   77  return QObject::tr( 
"This algorithm computes a buffer area for all the features in an input layer, using a fixed or dynamic distance.\n\n" 
   78                      "The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets.\n\n" 
   79                      "The end cap style parameter controls how line endings are handled in the buffer.\n\n" 
   80                      "The join style parameter specifies whether round, miter or beveled joins should be used when offsetting corners in a line.\n\n" 
   81                      "The miter limit parameter is only applicable for miter join styles, and controls the maximum distance from the offset curve to use when creating a mitered join." );
 
   84QString QgsBufferAlgorithm::shortDescription()
 const 
   86  return QObject::tr( 
"Computes a buffer area for all the features in an input layer, using a fixed or dynamic distance." );
 
   94QgsBufferAlgorithm *QgsBufferAlgorithm::createInstance()
 const 
   96  return new QgsBufferAlgorithm();
 
  101  std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
  106  const bool dissolve = parameterAsBoolean( parameters, QStringLiteral( 
"DISSOLVE" ), context );
 
  107  const bool keepDisjointSeparate = parameterAsBoolean( parameters, QStringLiteral( 
"SEPARATE_DISJOINT" ), context );
 
  108  const int segments = parameterAsInt( parameters, QStringLiteral( 
"SEGMENTS" ), context );
 
  111  const double miterLimit = parameterAsDouble( parameters, QStringLiteral( 
"MITER_LIMIT" ), context );
 
  112  const double bufferDistance = parameterAsDouble( parameters, QStringLiteral( 
"DISTANCE" ), context );
 
  120  QgsExpressionContext expressionContext = createExpressionContext( parameters, context, source.get() );
 
  124    bufferProperty = parameters.
value( QStringLiteral( 
"DISTANCE" ) ).value<
QgsProperty>();
 
  127  const long count = source->featureCount();
 
  133  const double step = count > 0 ? 100.0 / count : 1;
 
  136  QVector<QgsGeometry> bufferedGeometriesForDissolve;
 
  145    if ( dissolveAttrs.isEmpty() )
 
  151      double distance = bufferDistance;
 
  155        distance = bufferProperty.
valueAsDouble( expressionContext, bufferDistance );
 
  159      if ( outputGeometry.
isNull() )
 
  165        bufferedGeometriesForDissolve << outputGeometry;
 
  171        if ( !keepDisjointSeparate )
 
  192    else if ( !dissolve )
 
  202  if ( dissolve && !bufferedGeometriesForDissolve.isEmpty() )
 
  209    if ( !keepDisjointSeparate )
 
  232  outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
  245  const bool keepDisjointSeparate = parameterAsBoolean( parameters, QStringLiteral( 
"SEPARATE_DISJOINT" ), context );
 
  248  if ( sink == QLatin1String( 
"OUTPUT" ) )
 
  252      const VectorProperties inputProps = sourceProperties.value( QStringLiteral( 
"INPUT" ) );
 
  253      result.
fields = inputProps.fields;
 
  254      result.
crs = inputProps.crs;
 
  261      std::unique_ptr<QgsProcessingFeatureSource> source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
  264        result.
fields = source->fields();
 
  265        result.
crs = source->sourceCrs();
 
  275bool QgsBufferAlgorithm::supportInPlaceEdit( 
const QgsMapLayer *layer )
 const 
  277  const QgsVectorLayer *vlayer = qobject_cast<const QgsVectorLayer *>( layer );
 
@ VectorPolygon
Vector polygon layers.
 
@ Warning
Warning message.
 
@ Available
Properties are available.
 
JoinStyle
Join styles for buffers.
 
@ RegeneratesPrimaryKeyInSomeScenarios
Algorithm may drop the existing primary keys or FID values in some scenarios, depending on algorithm ...
 
QFlags< ProcessingAlgorithmFlag > ProcessingAlgorithmFlags
Flags indicating how and when an algorithm operates and should be exposed to users.
 
EndCapStyle
End cap styles for buffers.
 
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.
 
@ SupportsInPlaceEdits
Algorithm supports in-place editing.
 
@ Advanced
Parameter is an advanced parameter which should be hidden from users by default.
 
@ Double
Double/float values.
 
Abstract base class for all geometries.
 
Expression contexts are used to encapsulate the parameters around which a QgsExpression should be eva...
 
void setFeature(const QgsFeature &feature)
Convenience function for setting a feature for the context.
 
Wrapper for iterator of features from vector data provider or vector layer.
 
bool nextFeature(QgsFeature &f)
Fetch next feature and stores in f, returns true on success.
 
Wraps a request for features to a vector layer (or directly its vector data provider).
 
An interface for objects which accept features via addFeature(s) methods.
 
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
 
@ 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.
 
bool hasGeometry() const
Returns true if the feature has an associated geometry.
 
void setGeometry(const QgsGeometry &geometry)
Set the feature's geometry.
 
bool isCanceled() const
Tells whether the operation has been canceled already.
 
void setProgress(double progress)
Sets the current progress for the feedback object.
 
A geometry is the spatial representation of a feature.
 
QgsAbstractGeometry::const_part_iterator const_parts_begin() const
Returns STL-style const iterator pointing to the first part of the geometry.
 
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...
 
QgsAbstractGeometry::const_part_iterator const_parts_end() const
Returns STL-style iterator pointing to the imaginary part after the last part of the geometry.
 
bool convertToMultiType()
Converts single type geometry into multitype geometry e.g.
 
static QgsGeometry unaryUnion(const QVector< QgsGeometry > &geometries, const QgsGeometryParameters ¶meters=QgsGeometryParameters())
Compute the unary union on a list of geometries.
 
Base class for all map layer types.
 
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true, const char *file=__builtin_FILE(), const char *function=__builtin_FUNCTION(), int line=__builtin_LINE())
Adds a message to the log instance (and creates it if necessary).
 
virtual Qgis::ProcessingAlgorithmFlags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
 
Contains information about the context in which a processing algorithm is executed.
 
Custom exception class for processing related exceptions.
 
Base class for providing feedback from a processing algorithm.
 
A boolean parameter for processing algorithms.
 
An enum based parameter for processing algorithms, allowing for selection from predefined values.
 
A feature sink output for processing algorithms.
 
An input feature source (such as vector layers) parameter for processing algorithms.
 
A numeric parameter for processing algorithms.
 
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...
 
Definition for a property.
 
@ Double
Double value (including negative values)
 
A store for object properties.
 
QVariant value(const QgsExpressionContext &context, const QVariant &defaultValue=QVariant(), bool *ok=nullptr) const
Calculates the current value of the property, including any transforms which are set for the property...
 
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.
 
Properties of a vector source or sink used in an algorithm.
 
Qgis::WkbType wkbType
Geometry (WKB) type.
 
QgsCoordinateReferenceSystem crs
Coordinate Reference System.
 
Qgis::ProcessingPropertyAvailability availability
Availability of the properties. By default properties are not available.