Skip to content

Commit e92e20e

Browse files
committed
Move native c++ processing algorithms from core library to analysis
And split into separate files for each algorithm
1 parent 8dd8a9b commit e92e20e

File tree

83 files changed

+7268
-4407
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+7268
-4407
lines changed

doc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@ IF(WITH_APIDOC)
8989
${CMAKE_SOURCE_DIR}/src/analysis
9090
${CMAKE_SOURCE_DIR}/src/analysis/interpolation
9191
${CMAKE_SOURCE_DIR}/src/analysis/network
92+
${CMAKE_SOURCE_DIR}/src/analysis/processing
9293
${CMAKE_SOURCE_DIR}/src/analysis/raster
9394
${CMAKE_SOURCE_DIR}/src/analysis/vector
9495
${CMAKE_SOURCE_DIR}/src/3d

python/CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,11 +224,13 @@ ENDIF (WITH_SERVER AND WITH_SERVER_PLUGINS)
224224

225225
# additional analysis includes
226226
INCLUDE_DIRECTORIES(BEFORE
227+
../src/analysis/processing
227228
../src/analysis/vector
228229
../src/analysis/raster
229230
../src/analysis/network
230231
../src/analysis/interpolation
231232
../src/analysis/openstreetmap
233+
${CMAKE_BINARY_DIR}/src/analysis/processing
232234
${CMAKE_BINARY_DIR}/src/analysis/vector
233235
${CMAKE_BINARY_DIR}/src/analysis/raster
234236
${CMAKE_BINARY_DIR}/src/analysis/network

python/analysis/analysis_auto.sip

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,4 +26,5 @@
2626
%Include network/qgsnetworkdistancestrategy.sip
2727
%Include network/qgsgraphanalyzer.sip
2828
%Include network/qgsvectorlayerdirector.sip
29+
%Include processing/qgsnativealgorithms.sip
2930
%Include network/qgsgraphdirector.sip
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/************************************************************************
2+
* This file has been generated automatically from *
3+
* *
4+
* src/analysis/processing/qgsnativealgorithms.h *
5+
* *
6+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
7+
************************************************************************/
8+
9+
10+
11+
12+
class QgsNativeAlgorithms: QgsProcessingProvider
13+
{
14+
%Docstring
15+
.. versionadded:: 3.0
16+
Native c++ processing algorithm provider.
17+
%End
18+
19+
%TypeHeaderCode
20+
#include "qgsnativealgorithms.h"
21+
%End
22+
public:
23+
24+
QgsNativeAlgorithms( QObject *parent = 0 );
25+
%Docstring
26+
Constructor for QgsNativeAlgorithms.
27+
%End
28+
29+
virtual QIcon icon() const;
30+
31+
virtual QString svgIconPath() const;
32+
33+
virtual QString id() const;
34+
35+
virtual QString name() const;
36+
37+
virtual bool supportsNonFileBasedOutput() const;
38+
39+
40+
protected:
41+
42+
virtual void loadAlgorithms();
43+
44+
45+
};
46+
47+
48+
49+
/************************************************************************
50+
* This file has been generated automatically from *
51+
* *
52+
* src/analysis/processing/qgsnativealgorithms.h *
53+
* *
54+
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
55+
************************************************************************/

python/plugins/processing/tests/QgisAlgorithmsTest.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@
3030
import nose2
3131
import shutil
3232

33-
from qgis.core import (QgsProcessingAlgorithm,
33+
from qgis.core import (QgsApplication,
34+
QgsProcessingAlgorithm,
3435
QgsProcessingFeedback,
3536
QgsProcessingException)
37+
from qgis.analysis import (QgsNativeAlgorithms)
3638
from qgis.testing import start_app, unittest
3739
from processing.tools.dataobjects import createContext
3840

@@ -64,6 +66,7 @@ class TestQgisAlgorithms(unittest.TestCase, AlgorithmsTestBase.AlgorithmsTest):
6466
@classmethod
6567
def setUpClass(cls):
6668
start_app()
69+
QgsApplication.processingRegistry().addProvider(QgsNativeAlgorithms())
6770
from processing.core.Processing import Processing
6871
Processing.initialize()
6972
cls.cleanup_paths = []

src/analysis/CMakeLists.txt

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,42 @@ SET(QGIS_ANALYSIS_SRCS
2121
interpolation/TriDecorator.cpp
2222
interpolation/Vector3D.cpp
2323

24+
processing/qgsalgorithmaddincrementalfield.cpp
25+
processing/qgsalgorithmassignprojection.cpp
26+
processing/qgsalgorithmboundary.cpp
27+
processing/qgsalgorithmboundingbox.cpp
28+
processing/qgsalgorithmbuffer.cpp
29+
processing/qgsalgorithmcentroid.cpp
30+
processing/qgsalgorithmclip.cpp
31+
processing/qgsalgorithmconvexhull.cpp
32+
processing/qgsalgorithmdissolve.cpp
33+
processing/qgsalgorithmdropgeometry.cpp
34+
processing/qgsalgorithmdropmzvalues.cpp
35+
processing/qgsalgorithmextenttolayer.cpp
36+
processing/qgsalgorithmextractbyattribute.cpp
37+
processing/qgsalgorithmextractbyexpression.cpp
38+
processing/qgsalgorithmextractbyextent.cpp
39+
processing/qgsalgorithmextractbylocation.cpp
40+
processing/qgsalgorithmfixgeometries.cpp
41+
processing/qgsalgorithmjoinbyattribute.cpp
42+
processing/qgsalgorithmjoinwithlines.cpp
43+
processing/qgsalgorithmlineintersection.cpp
44+
processing/qgsalgorithmmeancoordinates.cpp
45+
processing/qgsalgorithmmergelines.cpp
46+
processing/qgsalgorithmminimumenclosingcircle.cpp
47+
processing/qgsalgorithmmultiparttosinglepart.cpp
48+
processing/qgsalgorithmorientedminimumboundingbox.cpp
49+
processing/qgsalgorithmrasterlayeruniquevalues.cpp
50+
processing/qgsalgorithmremovenullgeometry.cpp
51+
processing/qgsalgorithmpromotetomultipart.cpp
52+
processing/qgsalgorithmsaveselectedfeatures.cpp
53+
processing/qgsalgorithmsimplify.cpp
54+
processing/qgsalgorithmsmooth.cpp
55+
processing/qgsalgorithmsplitwithlines.cpp
56+
processing/qgsalgorithmsubdivide.cpp
57+
processing/qgsalgorithmtransform.cpp
58+
processing/qgsnativealgorithms.cpp
59+
2460
raster/qgsalignraster.cpp
2561
raster/qgsninecellfilter.cpp
2662
raster/qgsruggednessfilter.cpp
@@ -47,6 +83,8 @@ SET(QGIS_ANALYSIS_SRCS
4783
)
4884

4985
SET(QGIS_ANALYSIS_MOC_HDRS
86+
processing/qgsnativealgorithms.h
87+
5088
vector/qgsgeometrysnapper.h
5189

5290
network/qgsgraphdirector.h
@@ -142,6 +180,7 @@ INCLUDE_DIRECTORIES(
142180
${CMAKE_CURRENT_SOURCE_DIR}
143181
${CMAKE_SOURCE_DIR}/src/core/
144182
${CMAKE_SOURCE_DIR}/src/core/geometry
183+
${CMAKE_SOURCE_DIR}/src/core/processing
145184
${CMAKE_SOURCE_DIR}/src/core/raster
146185
${CMAKE_SOURCE_DIR}/src/core/symbology
147186
${CMAKE_SOURCE_DIR}/src/core/metadata
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
/***************************************************************************
2+
qgsalgorithmaddincrementalfield.cpp
3+
-----------------------------------
4+
begin : April 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 "qgsalgorithmaddincrementalfield.h"
19+
20+
///@cond PRIVATE
21+
22+
QString QgsAddIncrementalFieldAlgorithm::name() const
23+
{
24+
return QStringLiteral( "addautoincrementalfield" );
25+
}
26+
27+
QString QgsAddIncrementalFieldAlgorithm::displayName() const
28+
{
29+
return QObject::tr( "Add autoincremental field" );
30+
}
31+
32+
QString QgsAddIncrementalFieldAlgorithm::shortHelpString() const
33+
{
34+
return QObject::tr( "This algorithm adds a new integer field to a vector layer, with a sequential value for each feature.\n\n"
35+
"This field can be used as a unique ID for features in the layer. The new attribute "
36+
"is not added to the input layer but a new layer is generated instead.\n\n"
37+
"The initial starting value for the incremental series can be specified." );
38+
}
39+
40+
QStringList QgsAddIncrementalFieldAlgorithm::tags() const
41+
{
42+
return QObject::tr( "add,create,serial,primary,key,unique,field" ).split( ',' );
43+
}
44+
45+
QString QgsAddIncrementalFieldAlgorithm::group() const
46+
{
47+
return QObject::tr( "Vector table" );
48+
}
49+
50+
QString QgsAddIncrementalFieldAlgorithm::outputName() const
51+
{
52+
return QObject::tr( "Incremented" );
53+
}
54+
55+
QList<int> QgsAddIncrementalFieldAlgorithm::inputLayerTypes() const
56+
{
57+
return QList<int>() << QgsProcessing::TypeVector;
58+
}
59+
60+
QgsAddIncrementalFieldAlgorithm *QgsAddIncrementalFieldAlgorithm::createInstance() const
61+
{
62+
return new QgsAddIncrementalFieldAlgorithm();
63+
}
64+
65+
void QgsAddIncrementalFieldAlgorithm::initParameters( const QVariantMap & )
66+
{
67+
addParameter( new QgsProcessingParameterString( QStringLiteral( "FIELD_NAME" ), QObject::tr( "Field name" ), QStringLiteral( "AUTO" ) ) );
68+
addParameter( new QgsProcessingParameterNumber( QStringLiteral( "START" ), QObject::tr( "Start values at" ),
69+
QgsProcessingParameterNumber::Integer, 0, true ) );
70+
}
71+
72+
QgsFields QgsAddIncrementalFieldAlgorithm::outputFields( const QgsFields &inputFields ) const
73+
{
74+
QgsFields outFields = inputFields;
75+
outFields.append( QgsField( mFieldName, QVariant::LongLong ) );
76+
return outFields;
77+
}
78+
79+
bool QgsAddIncrementalFieldAlgorithm::prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback * )
80+
{
81+
mValue = parameterAsInt( parameters, QStringLiteral( "START" ), context );
82+
mFieldName = parameterAsString( parameters, QStringLiteral( "FIELD_NAME" ), context );
83+
return true;
84+
}
85+
86+
QgsFeature QgsAddIncrementalFieldAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingFeedback * )
87+
{
88+
QgsFeature f = feature;
89+
QgsAttributes attributes = f.attributes();
90+
attributes.append( mValue );
91+
mValue++;
92+
f.setAttributes( attributes );
93+
return f;
94+
}
95+
96+
///@endcond
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
/***************************************************************************
2+
qgsalgorithmaddincrementalfield.h
3+
---------------------------------
4+
begin : April 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+
#ifndef QGSALGORITHMADDINCREMENTALFIELD_H
19+
#define QGSALGORITHMADDINCREMENTALFIELD_H
20+
21+
#define SIP_NO_FILE
22+
23+
#include "qgis.h"
24+
#include "qgsprocessingalgorithm.h"
25+
26+
///@cond PRIVATE
27+
28+
/**
29+
* Native add incremental field algorithm.
30+
*/
31+
class QgsAddIncrementalFieldAlgorithm : public QgsProcessingFeatureBasedAlgorithm
32+
{
33+
34+
public:
35+
36+
QgsAddIncrementalFieldAlgorithm() = default;
37+
QString name() const override;
38+
QString displayName() const override;
39+
virtual QStringList tags() const override;
40+
QString group() const override;
41+
QString shortHelpString() const override;
42+
QList<int> inputLayerTypes() const override;
43+
QgsAddIncrementalFieldAlgorithm *createInstance() const override SIP_FACTORY;
44+
45+
protected:
46+
47+
void initParameters( const QVariantMap &configuration = QVariantMap() ) override;
48+
QString outputName() const override;
49+
QgsFields outputFields( const QgsFields &inputFields ) const override;
50+
51+
bool prepareAlgorithm( const QVariantMap &parameters, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
52+
QgsFeature processFeature( const QgsFeature &feature, QgsProcessingFeedback *feedback ) override;
53+
54+
private:
55+
56+
long long mValue = 0;
57+
QString mFieldName;
58+
59+
};
60+
61+
///@endcond PRIVATE
62+
63+
#endif // QGSNATIVEALGORITHMS_H
64+
65+

0 commit comments

Comments
 (0)