22 QString QgsSmoothAlgorithm::name()
 const 
   24   return QStringLiteral( 
"smoothgeometry" );
 
   27 QString QgsSmoothAlgorithm::displayName()
 const 
   29   return QObject::tr( 
"Smooth" );
 
   32 QStringList QgsSmoothAlgorithm::tags()
 const 
   34   return QObject::tr( 
"smooth,curve,generalize,round,bend,corners" ).split( 
',' );
 
   37 QString QgsSmoothAlgorithm::group()
 const 
   39   return QObject::tr( 
"Vector geometry" );
 
   42 QString QgsSmoothAlgorithm::groupId()
 const 
   44   return QStringLiteral( 
"vectorgeometry" );
 
   47 QString QgsSmoothAlgorithm::outputName()
 const 
   49   return QObject::tr( 
"Smoothed" );
 
   52 QString QgsSmoothAlgorithm::shortHelpString()
 const 
   54   return QObject::tr( 
"This algorithm smooths the geometries in a line or polygon layer. It creates a new layer with the " 
   55                       "same features as the ones in the input layer, but with geometries containing a higher number of vertices " 
   56                       "and corners in the geometries smoothed out.\n\n" 
   57                       "The iterations parameter dictates how many smoothing iterations will be applied to each " 
   58                       "geometry. A higher number of iterations results in smoother geometries with the cost of " 
   59                       "greater number of nodes in the geometries.\n\n" 
   60                       "The offset parameter controls how \"tightly\" the smoothed geometries follow the original geometries. " 
   61                       "Smaller values results in a tighter fit, and larger values will create a looser fit.\n\n" 
   62                       "The maximum angle parameter can be used to prevent smoothing of " 
   63                       "nodes with large angles. Any node where the angle of the segments to either " 
   64                       "side is larger than this will not be smoothed. For example, setting the maximum " 
   65                       "angle to 90 degrees or lower would preserve right angles in the geometry.\n\n" 
   66                       "If input geometries contain Z or M values, these will also be smoothed and the output " 
   67                       "geometry will retain the same dimensionality as the input geometry." );
 
   70 QgsSmoothAlgorithm *QgsSmoothAlgorithm::createInstance()
 const 
   72   return new QgsSmoothAlgorithm();
 
   75 QList<int> QgsSmoothAlgorithm::inputLayerTypes()
 const 
   80 void QgsSmoothAlgorithm::initParameters( 
const QVariantMap & )
 
   82   std::unique_ptr< QgsProcessingParameterNumber > iterations = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral( 
"ITERATIONS" ),
 
   85   iterations->setIsDynamic( 
true );
 
   87   iterations->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
   88   addParameter( iterations.release() );
 
   90   std::unique_ptr< QgsProcessingParameterNumber > offset = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral( 
"OFFSET" ),
 
   92       0.25, 
false, 0.0, 0.5 );
 
   93   offset->setIsDynamic( 
true );
 
   95   offset->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
   96   addParameter( offset.release() );
 
   98   std::unique_ptr< QgsProcessingParameterNumber > maxAngle = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral( 
"MAX_ANGLE" ),
 
  100       180.0, 
false, 0.0, 180.0 );
 
  101   maxAngle->setIsDynamic( 
true );
 
  103   maxAngle->setDynamicLayerParameterName( QStringLiteral( 
"INPUT" ) );
 
  104   addParameter( maxAngle.release() );
 
  109   mIterations = parameterAsInt( parameters, QStringLiteral( 
"ITERATIONS" ), context );
 
  111   if ( mDynamicIterations )
 
  112     mIterationsProperty = parameters.value( QStringLiteral( 
"ITERATIONS" ) ).value< 
QgsProperty >();
 
  114   mOffset = parameterAsDouble( parameters, QStringLiteral( 
"OFFSET" ), context );
 
  116   if ( mDynamicOffset )
 
  117     mOffsetProperty = parameters.value( QStringLiteral( 
"OFFSET" ) ).value< 
QgsProperty >();
 
  119   mMaxAngle = parameterAsDouble( parameters, QStringLiteral( 
"MAX_ANGLE" ), context );
 
  121   if ( mDynamicMaxAngle )
 
  122     mMaxAngleProperty = parameters.value( QStringLiteral( 
"MAX_ANGLE" ) ).value< 
QgsProperty >();
 
  132     int iterations = mIterations;
 
  133     if ( mDynamicIterations )
 
  134       iterations = mIterationsProperty.valueAsInt( context.
expressionContext(), iterations );
 
  136     double offset = mOffset;
 
  137     if ( mDynamicOffset )
 
  140     double maxAngle = mMaxAngle;
 
  141     if ( mDynamicMaxAngle )
 
  145     if ( outputGeometry.
isNull() )
 
  147       feedback->
reportError( QObject::tr( 
"Error smoothing geometry %1" ).arg( feature.
id() ) );