24 QString QgsBufferAlgorithm::name()
 const 
   26   return QStringLiteral( 
"buffer" );
 
   29 QString QgsBufferAlgorithm::displayName()
 const 
   31   return QObject::tr( 
"Buffer" );
 
   34 QStringList QgsBufferAlgorithm::tags()
 const 
   36   return QObject::tr( 
"buffer,grow,fixed,variable,distance" ).split( 
',' );
 
   39 QString QgsBufferAlgorithm::group()
 const 
   41   return QObject::tr( 
"Vector geometry" );
 
   44 QString QgsBufferAlgorithm::groupId()
 const 
   46   return QStringLiteral( 
"vectorgeometry" );
 
   49 void 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 ) );
 
   69 QString QgsBufferAlgorithm::shortHelpString()
 const 
   71   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" 
   72                       "The segments parameter controls the number of line segments to use to approximate a quarter circle when creating rounded offsets.\n\n" 
   73                       "The end cap style parameter controls how line endings are handled in the buffer.\n\n" 
   74                       "The join style parameter specifies whether round, miter or beveled joins should be used when offsetting corners in a line.\n\n" 
   75                       "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." );
 
   78 QgsBufferAlgorithm *QgsBufferAlgorithm::createInstance()
 const 
   80   return new QgsBufferAlgorithm();
 
   85   std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
   90   std::unique_ptr< QgsFeatureSink > sink( parameterAsSink( parameters, QStringLiteral( 
"OUTPUT" ), context, dest, source->fields(), 
QgsWkbTypes::MultiPolygon, source->sourceCrs() ) );
 
   95   bool dissolve = parameterAsBoolean( parameters, QStringLiteral( 
"DISSOLVE" ), context );
 
   96   int segments = parameterAsInt( parameters, QStringLiteral( 
"SEGMENTS" ), context );
 
   99   double miterLimit = parameterAsDouble( parameters, QStringLiteral( 
"MITER_LIMIT" ), context );
 
  100   double bufferDistance = parameterAsDouble( parameters, QStringLiteral( 
"DISTANCE" ), context );
 
  102   QgsExpressionContext expressionContext = createExpressionContext( parameters, context, source.get() );
 
  106     bufferProperty = parameters.
value( QStringLiteral( 
"DISTANCE" ) ).value< 
QgsProperty >();
 
  109   long count = source->featureCount();
 
  115   double step = count > 0 ? 100.0 / count : 1;
 
  118   QVector< QgsGeometry > bufferedGeometriesForDissolve;
 
  127     if ( dissolveAttrs.isEmpty() )
 
  133       double distance =  bufferDistance;
 
  137         distance = bufferProperty.
valueAsDouble( expressionContext, bufferDistance );
 
  141       if ( outputGeometry.
isNull() )
 
  143         QgsMessageLog::logMessage( QObject::tr( 
"Error calculating buffer for feature %1" ).arg( f.
id() ), QObject::tr( 
"Processing" ), Qgis::MessageLevel::Warning );
 
  146         bufferedGeometriesForDissolve << outputGeometry;
 
  172   outputs.insert( QStringLiteral( 
"OUTPUT" ), dest );
 
  176 QgsProcessingAlgorithm::Flags QgsBufferAlgorithm::flags()
 const 
  186   if ( sink == QLatin1String( 
"OUTPUT" ) )
 
  190       const VectorProperties inputProps = sourceProperties.value( QStringLiteral( 
"INPUT" ) );
 
  191       result.
fields = inputProps.fields;
 
  192       result.
crs = inputProps.crs;
 
  199       std::unique_ptr< QgsProcessingFeatureSource > source( parameterAsSource( parameters, QStringLiteral( 
"INPUT" ), context ) );
 
  202         result.
fields = source->fields();
 
  203         result.
crs = source->sourceCrs();
 
  213 bool QgsBufferAlgorithm::supportInPlaceEdit( 
const QgsMapLayer *layer )
 const 
  215   const QgsVectorLayer *vlayer = qobject_cast< const QgsVectorLayer * >( layer );
 
  219   return vlayer->
wkbType() == QgsWkbTypes::Type::Polygon || vlayer->
wkbType() == QgsWkbTypes::Type::MultiPolygon;
 
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)
This class wraps a request for features to a vector layer (or directly its vector data provider).
@ FastInsert
Use faster inserts, at the cost of updating the passed features to reflect changes made at the provid...
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 SIP_HOLDGIL
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.
JoinStyle
Join styles for buffers.
static QgsGeometry unaryUnion(const QVector< QgsGeometry > &geometries)
Compute the unary union on a list of geometries.
EndCapStyle
End cap styles for buffers.
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.
static void logMessage(const QString &message, const QString &tag=QString(), Qgis::MessageLevel level=Qgis::MessageLevel::Warning, bool notifyUser=true)
Adds a message to the log instance (and creates it if necessary).
@ Available
Properties are available.
virtual Flags flags() const
Returns the flags indicating how and when the algorithm operates and should be exposed to users.
@ FlagSupportsInPlaceEdits
Algorithm supports in-place editing.
Contains information about the context in which a processing algorithm is executed.
Custom exception class for processing related exceptions.
@ FlagSkipGeometryValidityChecks
Invalid geometry checks should always be skipped. This flag can be useful for algorithms which always...
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.
@ Double
Double/float values.
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...
@ TypeVectorPolygon
Vector polygon layers.
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 data sets.
Q_INVOKABLE QgsWkbTypes::Type wkbType() const FINAL
Returns the WKBType or WKBUnknown in case of error.
Properties of a vector source or sink used in an algorithm.
QgsCoordinateReferenceSystem crs
Coordinate Reference System.
QgsWkbTypes::Type wkbType
Geometry (WKB) type.
QgsProcessingAlgorithm::PropertyAvailability availability
Availability of the properties. By default properties are not available.