Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsalgorithmdensifygeometries.cpp 3 : : --------------------- 4 : : begin : January 2019 5 : : copyright : (C) 2019 by Matthias Kuhn 6 : : email : matthias@opengis.ch 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 : : 19 : : #include "qgsalgorithmdensifygeometriesbyinterval.h" 20 : : 21 : : ///@cond PRIVATE 22 : : 23 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::name() const 24 : : { 25 : 0 : return QStringLiteral( "densifygeometriesgivenaninterval" ); 26 : : } 27 : : 28 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::displayName() const 29 : : { 30 : 0 : return QObject::tr( "Densify by interval" ); 31 : : } 32 : : 33 : 0 : QStringList QgsDensifyGeometriesByIntervalAlgorithm::tags() const 34 : : { 35 : 0 : return QObject::tr( "add,vertex,vertices,points,nodes" ).split( ',' ); 36 : 0 : } 37 : : 38 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::group() const 39 : : { 40 : 0 : return QObject::tr( "Vector geometry" ); 41 : : } 42 : : 43 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::groupId() const 44 : : { 45 : 0 : return QStringLiteral( "vectorgeometry" ); 46 : : } 47 : : 48 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::shortHelpString() const 49 : : { 50 : 0 : return QObject::tr( "Geometries are densified by adding additional vertices on " 51 : : "edges that have a maximum distance of the interval parameter " 52 : : "in map units." ); 53 : : } 54 : : 55 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::shortDescription() const 56 : : { 57 : 0 : return QObject::tr( "Creates a densified version of geometries." ); 58 : : } 59 : : 60 : 0 : QgsDensifyGeometriesByIntervalAlgorithm *QgsDensifyGeometriesByIntervalAlgorithm::createInstance() const 61 : : { 62 : 0 : return new QgsDensifyGeometriesByIntervalAlgorithm; 63 : : 64 : 0 : } 65 : : 66 : 0 : QList<int> QgsDensifyGeometriesByIntervalAlgorithm::inputLayerTypes() const 67 : : { 68 : 0 : return QList<int>() << QgsProcessing::TypeVectorLine << QgsProcessing::TypeVectorPolygon; 69 : 0 : } 70 : : 71 : 0 : void QgsDensifyGeometriesByIntervalAlgorithm::initParameters( const QVariantMap &configuration ) 72 : : { 73 : 0 : Q_UNUSED( configuration ) 74 : 0 : std::unique_ptr<QgsProcessingParameterDistance> interval = std::make_unique<QgsProcessingParameterDistance>( QStringLiteral( "INTERVAL" ), 75 : 0 : QObject::tr( "Interval between vertices to add" ), 76 : 0 : 1, QStringLiteral( "INPUT" ), false, 0, 10000000 ); 77 : 0 : interval->setIsDynamic( true ); 78 : 0 : interval->setDynamicPropertyDefinition( QgsPropertyDefinition( QStringLiteral( "Interval" ), QObject::tr( "Interval" ), QgsPropertyDefinition::DoublePositive ) ); 79 : 0 : interval->setDynamicLayerParameterName( QStringLiteral( "INPUT" ) ); 80 : 0 : addParameter( interval.release() ); 81 : 0 : } 82 : : 83 : 0 : QString QgsDensifyGeometriesByIntervalAlgorithm::outputName() const 84 : : { 85 : 0 : return QObject::tr( "Densified" ); 86 : : } 87 : : 88 : 0 : QgsFeatureList QgsDensifyGeometriesByIntervalAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) 89 : : { 90 : 0 : Q_UNUSED( context ) 91 : : Q_UNUSED( feedback ) 92 : 0 : QgsFeature modifiedFeature = feature; 93 : : 94 : 0 : double interval = mInterval; 95 : 0 : if ( mDynamicInterval ) 96 : 0 : interval = mIntervalProperty.valueAsDouble( context.expressionContext(), interval ); 97 : : 98 : 0 : if ( feature.hasGeometry() ) 99 : 0 : modifiedFeature.setGeometry( feature.geometry().densifyByDistance( interval ) ); 100 : : 101 : 0 : return QgsFeatureList() << modifiedFeature; 102 : 0 : } 103 : : 104 : 0 : bool QgsDensifyGeometriesByIntervalAlgorithm::prepareAlgorithm( const QVariantMap ¶meters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) 105 : : { 106 : : Q_UNUSED( feedback ) 107 : 0 : mInterval = parameterAsDouble( parameters, QStringLiteral( "INTERVAL" ), context ); 108 : : 109 : 0 : mDynamicInterval = QgsProcessingParameters::isDynamic( parameters, QStringLiteral( "INTERVAL" ) ); 110 : 0 : if ( mDynamicInterval ) 111 : 0 : mIntervalProperty = parameters.value( QStringLiteral( "INTERVAL" ) ).value< QgsProperty >(); 112 : : 113 : 0 : return true; 114 : 0 : } 115 : : 116 : : ///@endcond PRIVATE