Skip to content

Commit 6c110c8

Browse files
committedJan 20, 2019
Correctly assign output type from input type
1 parent f4a25eb commit 6c110c8

File tree

2 files changed

+26
-20
lines changed

2 files changed

+26
-20
lines changed
 

‎src/analysis/processing/qgsalgorithmpolygonstolines.cpp

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,28 @@ QString QgsPolygonsToLinesAlgorithm::outputName() const
5353
return QObject::tr( "Lines" );
5454
}
5555

56+
QgsProcessing::SourceType QgsPolygonsToLinesAlgorithm::outputLayerType() const
57+
{
58+
return QgsProcessing::TypeVectorLine;
59+
}
60+
61+
QgsWkbTypes::Type QgsPolygonsToLinesAlgorithm::outputWkbType( QgsWkbTypes::Type inputWkbType ) const
62+
{
63+
QgsWkbTypes::Type wkbType = QgsWkbTypes::Unknown;
64+
65+
if ( QgsWkbTypes::singleType( QgsWkbTypes::flatType( inputWkbType ) ) == QgsWkbTypes::Polygon )
66+
wkbType = QgsWkbTypes::MultiLineString;
67+
else if ( QgsWkbTypes::singleType( QgsWkbTypes::flatType( inputWkbType ) ) == QgsWkbTypes::CurvePolygon )
68+
wkbType = QgsWkbTypes::MultiCurve;
69+
70+
if ( QgsWkbTypes::hasM( inputWkbType ) )
71+
wkbType = QgsWkbTypes::addM( wkbType );
72+
if ( QgsWkbTypes::hasZ( inputWkbType ) )
73+
wkbType = QgsWkbTypes::addZ( wkbType );
74+
75+
return wkbType;
76+
}
77+
5678
QString QgsPolygonsToLinesAlgorithm::shortHelpString() const
5779
{
5880
return QObject::tr( "Converts polygons to lines" );
@@ -70,7 +92,7 @@ QgsPolygonsToLinesAlgorithm *QgsPolygonsToLinesAlgorithm::createInstance() const
7092

7193
QList<int> QgsPolygonsToLinesAlgorithm::inputLayerTypes() const
7294
{
73-
return QList< int >() << QgsProcessing::TypeVectorPolygon;
95+
return QList<int>() << QgsProcessing::TypeVectorPolygon;
7496
}
7597

7698
QgsFeatureList QgsPolygonsToLinesAlgorithm::processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback * )
@@ -90,7 +112,7 @@ QgsGeometry QgsPolygonsToLinesAlgorithm::convertToLines( const QgsGeometry &geom
90112
{
91113
auto rings = extractRings( geometry.constGet() );
92114

93-
QgsWkbTypes::Type resultType = outWkbType( geometry.wkbType() );
115+
QgsWkbTypes::Type resultType = outputWkbType( geometry.wkbType() );
94116

95117
std::unique_ptr<QgsMultiCurve> lineGeometry;
96118

@@ -105,23 +127,6 @@ QgsGeometry QgsPolygonsToLinesAlgorithm::convertToLines( const QgsGeometry &geom
105127
return QgsGeometry( lineGeometry.release() );
106128
}
107129

108-
QgsWkbTypes::Type QgsPolygonsToLinesAlgorithm::outWkbType( QgsWkbTypes::Type polygonWkbType ) const
109-
{
110-
QgsWkbTypes::Type wkbType = QgsWkbTypes::NoGeometry;
111-
112-
if ( QgsWkbTypes::singleType( QgsWkbTypes::flatType( polygonWkbType ) ) == QgsWkbTypes::Polygon )
113-
wkbType = QgsWkbTypes::MultiLineString;
114-
else if ( QgsWkbTypes::singleType( QgsWkbTypes::flatType( polygonWkbType ) ) == QgsWkbTypes::CurvePolygon )
115-
wkbType = QgsWkbTypes::MultiCurve;
116-
117-
if ( QgsWkbTypes::hasM( polygonWkbType ) )
118-
wkbType = QgsWkbTypes::addM( wkbType );
119-
if ( QgsWkbTypes::hasZ( polygonWkbType ) )
120-
wkbType = QgsWkbTypes::addZ( wkbType );
121-
122-
return wkbType;
123-
}
124-
125130
QList<QgsCurve *> QgsPolygonsToLinesAlgorithm::extractRings( const QgsAbstractGeometry *geom ) const
126131
{
127132
QList<QgsCurve *> rings;

‎src/analysis/processing/qgsalgorithmpolygonstolines.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ class QgsPolygonsToLinesAlgorithm : public QgsProcessingFeatureBasedAlgorithm
4646

4747
protected:
4848
QString outputName() const override;
49+
QgsProcessing::SourceType outputLayerType() const override;
50+
QgsWkbTypes::Type outputWkbType( QgsWkbTypes::Type inputWkbType ) const override;
4951
QgsFeatureList processFeature( const QgsFeature &feature, QgsProcessingContext &context, QgsProcessingFeedback *feedback ) override;
5052

5153
private:
5254
QgsGeometry convertToLines( const QgsGeometry &geometry ) const;
5355
QList<QgsCurve *> extractRings( const QgsAbstractGeometry *geom ) const;
54-
QgsWkbTypes::Type outWkbType( QgsWkbTypes::Type polygonWkbType ) const;
5556

5657
friend class TestQgsProcessingAlgs;
5758
};

0 commit comments

Comments
 (0)
Please sign in to comment.