LCOV - code coverage report
Current view: top level - analysis/processing - qgsalgorithmsnaptogrid.cpp (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 0 90 0.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :                          qgsalgorithmsnaptogrid.cpp
       3                 :            :                          --------------------------
       4                 :            :     begin                : October 2017
       5                 :            :     copyright            : (C) 2017 by Nyall Dawson
       6                 :            :     email                : nyall dot dawson at gmail dot com
       7                 :            :  ***************************************************************************/
       8                 :            : 
       9                 :            : /***************************************************************************
      10                 :            :  *                                                                         *
      11                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      12                 :            :  *   it under the terms of the GNU General Public License as published by  *
      13                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      14                 :            :  *   (at your option) any later version.                                   *
      15                 :            :  *                                                                         *
      16                 :            :  ***************************************************************************/
      17                 :            : 
      18                 :            : #include "qgsalgorithmsnaptogrid.h"
      19                 :            : 
      20                 :            : ///@cond PRIVATE
      21                 :            : 
      22                 :          0 : QString QgsSnapToGridAlgorithm::name() const
      23                 :            : {
      24                 :          0 :   return QStringLiteral( "snappointstogrid" );
      25                 :            : }
      26                 :            : 
      27                 :          0 : QString QgsSnapToGridAlgorithm::displayName() const
      28                 :            : {
      29                 :          0 :   return QObject::tr( "Snap points to grid" );
      30                 :            : }
      31                 :            : 
      32                 :          0 : QStringList QgsSnapToGridAlgorithm::tags() const
      33                 :            : {
      34                 :          0 :   return QObject::tr( "snapped,grid,simplify,round,precision" ).split( ',' );
      35                 :          0 : }
      36                 :            : 
      37                 :          0 : QString QgsSnapToGridAlgorithm::group() const
      38                 :            : {
      39                 :          0 :   return QObject::tr( "Vector geometry" );
      40                 :            : }
      41                 :            : 
      42                 :          0 : QString QgsSnapToGridAlgorithm::groupId() const
      43                 :            : {
      44                 :          0 :   return QStringLiteral( "vectorgeometry" );
      45                 :            : }
      46                 :            : 
      47                 :          0 : QString QgsSnapToGridAlgorithm::outputName() const
      48                 :            : {
      49                 :          0 :   return QObject::tr( "Snapped" );
      50                 :            : }
      51                 :            : 
      52                 :          0 : QString QgsSnapToGridAlgorithm::shortHelpString() const
      53                 :            : {
      54                 :          0 :   return QObject::tr( "This algorithm modifies the coordinates of geometries in a vector layer, so that all points "
      55                 :            :                       "or vertices are snapped to the closest point of the grid.\n\n"
      56                 :            :                       "If the snapped geometry cannot be calculated (or is totally collapsed) the feature's "
      57                 :            :                       "geometry will be cleared.\n\n"
      58                 :            :                       "Note that snapping to grid may generate an invalid geometry in some corner cases.\n\n"
      59                 :            :                       "Snapping can be performed on the X, Y, Z or M axis. A grid spacing of 0 for any axis will "
      60                 :            :                       "disable snapping for that axis." );
      61                 :            : }
      62                 :            : 
      63                 :          0 : QgsSnapToGridAlgorithm *QgsSnapToGridAlgorithm::createInstance() const
      64                 :            : {
      65                 :          0 :   return new QgsSnapToGridAlgorithm();
      66                 :          0 : }
      67                 :            : 
      68                 :          0 : void QgsSnapToGridAlgorithm::initParameters( const QVariantMap & )
      69                 :            : {
      70                 :          0 :   std::unique_ptr< QgsProcessingParameterDistance> hSpacing = std::make_unique< QgsProcessingParameterDistance >( QStringLiteral( "HSPACING" ),
      71                 :          0 :       QObject::tr( "X Grid Spacing" ), 1, QStringLiteral( "INPUT" ), false, 0 );
      72                 :          0 :   hSpacing->setIsDynamic( true );
      73                 :          0 :   hSpacing->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "HSPACING" ), QObject::tr( "X Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
      74                 :          0 :   hSpacing->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
      75                 :          0 :   addParameter( hSpacing.release() );
      76                 :            : 
      77                 :          0 :   std::unique_ptr< QgsProcessingParameterDistance> vSpacing = std::make_unique< QgsProcessingParameterDistance >( QStringLiteral( "VSPACING" ),
      78                 :          0 :       QObject::tr( "Y Grid Spacing" ), 1, QStringLiteral( "INPUT" ), false, 0 );
      79                 :          0 :   vSpacing->setIsDynamic( true );
      80                 :          0 :   vSpacing->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "VSPACING" ), QObject::tr( "Y Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
      81                 :          0 :   vSpacing->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
      82                 :          0 :   addParameter( vSpacing.release() );
      83                 :            : 
      84                 :          0 :   std::unique_ptr< QgsProcessingParameterNumber > zSpacing = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral( "ZSPACING" ),
      85                 :          0 :       QObject::tr( "Z Grid Spacing" ), QgsProcessingParameterNumber::Double,
      86                 :          0 :       0, false, 0 );
      87                 :          0 :   zSpacing->setIsDynamic( true );
      88                 :          0 :   zSpacing->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "ZSPACING" ), QObject::tr( "Z Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
      89                 :          0 :   zSpacing->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
      90                 :          0 :   addParameter( zSpacing.release() );
      91                 :            : 
      92                 :          0 :   std::unique_ptr< QgsProcessingParameterNumber > mSpacing = std::make_unique< QgsProcessingParameterNumber >( QStringLiteral( "MSPACING" ),
      93                 :          0 :       QObject::tr( "M Grid Spacing" ), QgsProcessingParameterNumber::Double,
      94                 :          0 :       0, false, 0 );
      95                 :          0 :   mSpacing->setIsDynamic( true );
      96                 :          0 :   mSpacing->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "MSPACING" ), QObject::tr( "M Grid Spacing" ), QgsPropertyDefinition::DoublePositive ) );
      97                 :          0 :   mSpacing->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) );
      98                 :          0 :   addParameter( mSpacing.release() );
      99                 :          0 : }
     100                 :            : 
     101                 :          0 : bool QgsSnapToGridAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
     102                 :            : {
     103                 :          0 :   mIntervalX = parameterAsDouble( parameters, QStringLiteral( "HSPACING" ), context );
     104                 :          0 :   mDynamicIntervalX = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "HSPACING" ) );
     105                 :          0 :   if ( mDynamicIntervalX )
     106                 :          0 :     mIntervalXProperty = parameters.value( QStringLiteral( "HSPACING" ) ).value< QgsProperty >();
     107                 :            : 
     108                 :          0 :   mIntervalY = parameterAsDouble( parameters, QStringLiteral( "VSPACING" ), context );
     109                 :          0 :   mDynamicIntervalY = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "VSPACING" ) );
     110                 :          0 :   if ( mDynamicIntervalY )
     111                 :          0 :     mIntervalYProperty = parameters.value( QStringLiteral( "VSPACING" ) ).value< QgsProperty >();
     112                 :            : 
     113                 :          0 :   mIntervalZ = parameterAsDouble( parameters, QStringLiteral( "ZSPACING" ), context );
     114                 :          0 :   mDynamicIntervalZ = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "ZSPACING" ) );
     115                 :          0 :   if ( mDynamicIntervalZ )
     116                 :          0 :     mIntervalZProperty = parameters.value( QStringLiteral( "ZSPACING" ) ).value< QgsProperty >();
     117                 :            : 
     118                 :          0 :   mIntervalM = parameterAsDouble( parameters, QStringLiteral( "MSPACING" ), context );
     119                 :          0 :   mDynamicIntervalM = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "MSPACING" ) );
     120                 :          0 :   if ( mDynamicIntervalM )
     121                 :          0 :     mIntervalMProperty = parameters.value( QStringLiteral( "MSPACING" ) ).value< QgsProperty >();
     122                 :            : 
     123                 :          0 :   return true;
     124                 :          0 : }
     125                 :            : 
     126                 :          0 : QgsFeatureList QgsSnapToGridAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback )
     127                 :            : {
     128                 :          0 :   QgsFeature f = feature;
     129                 :          0 :   if ( f.hasGeometry() )
     130                 :            :   {
     131                 :          0 :     double intervalX = mIntervalX;
     132                 :          0 :     if ( mDynamicIntervalX )
     133                 :          0 :       intervalX = mIntervalXProperty.valueAsDouble( context.expressionContext(), intervalX );
     134                 :            : 
     135                 :          0 :     double intervalY = mIntervalY;
     136                 :          0 :     if ( mDynamicIntervalY )
     137                 :          0 :       intervalY = mIntervalYProperty.valueAsDouble( context.expressionContext(), intervalY );
     138                 :            : 
     139                 :          0 :     double intervalZ = mIntervalZ;
     140                 :          0 :     if ( mDynamicIntervalZ )
     141                 :          0 :       intervalZ = mIntervalZProperty.valueAsDouble( context.expressionContext(), intervalZ );
     142                 :            : 
     143                 :          0 :     double intervalM = mIntervalM;
     144                 :          0 :     if ( mDynamicIntervalM )
     145                 :          0 :       intervalM = mIntervalMProperty.valueAsDouble( context.expressionContext(), intervalM );
     146                 :            : 
     147                 :          0 :     QgsGeometry outputGeometry = f.geometry().snappedToGrid( intervalX, intervalY, intervalZ, intervalM );
     148                 :          0 :     if ( outputGeometry.isNull() )
     149                 :            :     {
     150                 :          0 :       feedback->reportError( QObject::tr( "Error snapping geometry %1" ).arg( feature.id() ) );
     151                 :          0 :     }
     152                 :          0 :     f.setGeometry( outputGeometry );
     153                 :          0 :   }
     154                 :          0 :   return QgsFeatureList() << f;
     155                 :          0 : }
     156                 :            : 
     157                 :          0 : QgsProcessingFeatureSource::Flag QgsSnapToGridAlgorithm::sourceFlags() const
     158                 :            : {
     159                 :          0 :   return QgsProcessingFeatureSource::FlagSkipGeometryValidityChecks;
     160                 :            : }
     161                 :            : 
     162                 :            : ///@endcond
     163                 :            : 
     164                 :            : 

Generated by: LCOV version 1.14