Skip to content

Commit b5197c8

Browse files
committedOct 12, 2017
Port drop geometries to c++
1 parent 2951afa commit b5197c8

File tree

9 files changed

+78
-68
lines changed

9 files changed

+78
-68
lines changed
 

‎python/core/processing/qgsprocessingalgorithm.sip‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,6 +896,13 @@ class QgsProcessingFeatureBasedAlgorithm : QgsProcessingAlgorithm
896896
virtual QVariantMap processAlgorithm( const QVariantMap &parameters,
897897
QgsProcessingContext &context, QgsProcessingFeedback *feedback );
898898

899+
virtual QgsFeatureRequest request() const;
900+
%Docstring
901+
Returns the feature request used for fetching features to process from the
902+
source layer. The default implementation requests all attributes and geometry.
903+
:rtype: QgsFeatureRequest
904+
%End
905+
899906
};
900907

901908

‎python/plugins/processing/algs/help/qgis.yaml‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,6 @@ qgis:distancetonearesthub: >
153153

154154
The resulting layer can contain only source points with an additional field indicating the distance to the nearest point and the name of the destination point, or lines linking each source point with its nearest destination point.
155155

156-
qgis:dropgeometries: >
157-
This algorithm removes any geometries from an input layer and returns a layer containing only the feature attributes.
158-
159156
qgis:dropmzvalues: >
160157
This algorithm can remove any measure (M) or Z values from input geometries.
161158

‎python/plugins/processing/algs/qgis/DropGeometry.py‎

Lines changed: 0 additions & 62 deletions
This file was deleted.

‎python/plugins/processing/algs/qgis/QGISAlgorithmProvider.py‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
from .DensifyGeometries import DensifyGeometries
5858
from .DensifyGeometriesInterval import DensifyGeometriesInterval
5959
from .Difference import Difference
60-
from .DropGeometry import DropGeometry
6160
from .DropMZValues import DropMZValues
6261
from .EliminateSelection import EliminateSelection
6362
from .EquivalentNumField import EquivalentNumField
@@ -186,7 +185,6 @@ def getAlgs(self):
186185
DensifyGeometries(),
187186
DensifyGeometriesInterval(),
188187
Difference(),
189-
DropGeometry(),
190188
DropMZValues(),
191189
EliminateSelection(),
192190
EquivalentNumField(),

‎python/plugins/processing/tests/testdata/qgis_algorithm_tests.yaml‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2008,7 +2008,7 @@ tests:
20082008
geometry:
20092009
precision: 7
20102010

2011-
- algorithm: qgis:dropgeometries
2011+
- algorithm: native:dropgeometries
20122012
name: Drop geometries
20132013
params:
20142014
INPUT:

‎src/core/processing/qgsnativealgorithms.cpp‎

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ void QgsNativeAlgorithms::loadAlgorithms()
9595
addAlgorithm( new QgsAssignProjectionAlgorithm() );
9696
addAlgorithm( new QgsAddIncrementalFieldAlgorithm() );
9797
addAlgorithm( new QgsBoundaryAlgorithm() );
98+
addAlgorithm( new QgsDropGeometryAlgorithm() );
9899
}
99100

100101
void QgsSaveSelectedFeatures::initAlgorithm( const QVariantMap & )
@@ -3262,5 +3263,38 @@ QgsFeature QgsBoundaryAlgorithm::processFeature( const QgsFeature &feature, QgsP
32623263
return outFeature;
32633264
}
32643265

3266+
QString QgsDropGeometryAlgorithm::shortHelpString() const
3267+
{
3268+
return QObject::tr( "This algorithm removes any geometries from an input layer and returns a layer containing only the feature attributes." );
3269+
}
3270+
3271+
QgsDropGeometryAlgorithm *QgsDropGeometryAlgorithm::createInstance() const
3272+
{
3273+
return new QgsDropGeometryAlgorithm();
3274+
}
3275+
3276+
QgsCoordinateReferenceSystem QgsDropGeometryAlgorithm::outputCrs( const QgsCoordinateReferenceSystem & ) const
3277+
{
3278+
return QgsCoordinateReferenceSystem();
3279+
}
3280+
3281+
QgsWkbTypes::Type QgsDropGeometryAlgorithm::outputWkbType( QgsWkbTypes::Type ) const
3282+
{
3283+
return QgsWkbTypes::NoGeometry;
3284+
}
3285+
3286+
QgsFeatureRequest QgsDropGeometryAlgorithm::request() const
3287+
{
3288+
return QgsFeatureRequest().setFlags( QgsFeatureRequest::NoGeometry );
3289+
}
3290+
3291+
QgsFeature QgsDropGeometryAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingFeedback * )
3292+
{
3293+
QgsFeature f = feature;
3294+
f.clearGeometry();
3295+
return f;
3296+
}
3297+
32653298

32663299
///@endcond
3300+

‎src/core/processing/qgsnativealgorithms.h‎

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,31 @@ class QgsBoundaryAlgorithm : public QgsProcessingFeatureBasedAlgorithm
122122
QgsFeature processFeature( const QgsFeature &feature, QgsProcessingFeedback *feedback ) override;
123123
};
124124

125+
/**
126+
* Native drop geometries algorithm.
127+
*/
128+
class QgsDropGeometryAlgorithm : public QgsProcessingFeatureBasedAlgorithm
129+
{
130+
131+
public:
132+
133+
QgsDropGeometryAlgorithm() = default;
134+
QString name() const override { return QStringLiteral( "dropgeometries" ); }
135+
QString displayName() const override { return QObject::tr( "Drop geometries" ); }
136+
QStringList tags() const override { return QObject::tr( "remove,drop,delete,geometry,objects" ).split( ',' ); }
137+
QString group() const override { return QObject::tr( "Vector general" ); }
138+
QString shortHelpString() const override;
139+
QgsDropGeometryAlgorithm *createInstance() const override SIP_FACTORY;
140+
QgsCoordinateReferenceSystem outputCrs( const QgsCoordinateReferenceSystem &inputCrs ) const override;
141+
142+
protected:
143+
144+
QString outputName() const override { return QObject::tr( "Dropped geometries" ); }
145+
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
146+
QgsFeatureRequest request() const override;
147+
QgsFeature processFeature( const QgsFeature &feature, QgsProcessingFeedback *feedback ) override;
148+
};
149+
125150
/**
126151
* Native transform algorithm.
127152
*/

‎src/core/processing/qgsprocessingalgorithm.cpp‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -718,3 +718,8 @@ QVariantMap QgsProcessingFeatureBasedAlgorithm::processAlgorithm( const QVariant
718718
outputs.insert( QStringLiteral( "OUTPUT" ), dest );
719719
return outputs;
720720
}
721+
722+
QgsFeatureRequest QgsProcessingFeatureBasedAlgorithm::request() const
723+
{
724+
return QgsFeatureRequest();
725+
}

‎src/core/processing/qgsprocessingalgorithm.h‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -877,6 +877,12 @@ class CORE_EXPORT QgsProcessingFeatureBasedAlgorithm : public QgsProcessingAlgor
877877
virtual QVariantMap processAlgorithm( const QVariantMap &parameters,
878878
QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
879879

880+
/**
881+
* Returns the feature request used for fetching features to process from the
882+
* source layer. The default implementation requests all attributes and geometry.
883+
*/
884+
virtual QgsFeatureRequest request() const;
885+
880886
private:
881887

882888
std::unique_ptr< QgsProcessingFeatureSource > mSource;

0 commit comments

Comments
 (0)
Please sign in to comment.