From f5004ed7ef0d62ca6da05ef3b0bcfa0379bc2ade Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Tue, 26 Sep 2017 08:33:47 +1000 Subject: [PATCH] Fix multi line string allowing insertion of non line geometries --- python/core/geometry/qgsmultilinestring.sip | 10 +++------- python/core/geometry/qgsmultipoint.sip | 10 +--------- src/core/geometry/qgsmultilinestring.cpp | 8 ++++++++ src/core/geometry/qgsmultilinestring.h | 6 ++---- src/core/geometry/qgsmultipoint.h | 10 +--------- 5 files changed, 15 insertions(+), 29 deletions(-) diff --git a/python/core/geometry/qgsmultilinestring.sip b/python/core/geometry/qgsmultilinestring.sip index cb18ba843df..96e01098f13 100644 --- a/python/core/geometry/qgsmultilinestring.sip +++ b/python/core/geometry/qgsmultilinestring.sip @@ -20,29 +20,25 @@ class QgsMultiLineString: QgsMultiCurve %End public: QgsMultiLineString(); + virtual QString geometryType() const; virtual QgsMultiLineString *clone() const /Factory/; - virtual void clear(); virtual bool fromWkt( const QString &wkt ); - virtual QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const; virtual QDomElement asGML3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const; virtual QString asJSON( int precision = 17 ) const; - virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ ); -%Docstring -Adds a geometry and takes ownership. Returns true in case of success - :rtype: bool -%End + virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index ); + virtual QgsMultiCurve *toCurveType() const /Factory/; diff --git a/python/core/geometry/qgsmultipoint.sip b/python/core/geometry/qgsmultipoint.sip index b89ee4d34f6..f9281c18541 100644 --- a/python/core/geometry/qgsmultipoint.sip +++ b/python/core/geometry/qgsmultipoint.sip @@ -20,37 +20,29 @@ class QgsMultiPointV2: QgsGeometryCollection %End public: QgsMultiPointV2(); + virtual QString geometryType() const; virtual QgsMultiPointV2 *clone() const /Factory/; virtual QgsMultiPointV2 *toCurveType() const /Factory/; - virtual bool fromWkt( const QString &wkt ); virtual void clear(); - virtual QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const; virtual QDomElement asGML3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const; virtual QString asJSON( int precision = 17 ) const; - virtual int nCoordinates() const; - virtual bool addGeometry( QgsAbstractGeometry *g /Transfer/ ); -%Docstring -Adds a geometry and takes ownership. Returns true in case of success - :rtype: bool -%End virtual bool insertGeometry( QgsAbstractGeometry *g /Transfer/, int index ); - virtual QgsAbstractGeometry *boundary() const /Factory/; diff --git a/src/core/geometry/qgsmultilinestring.cpp b/src/core/geometry/qgsmultilinestring.cpp index 19cc99c2f00..8074fa2d01a 100644 --- a/src/core/geometry/qgsmultilinestring.cpp +++ b/src/core/geometry/qgsmultilinestring.cpp @@ -125,6 +125,14 @@ bool QgsMultiLineString::addGeometry( QgsAbstractGeometry *g ) return QgsGeometryCollection::addGeometry( g ); } +bool QgsMultiLineString::insertGeometry( QgsAbstractGeometry *g, int index ) +{ + if ( !g || QgsWkbTypes::flatType( g->wkbType() ) != QgsWkbTypes::LineString ) + return false; + + return QgsGeometryCollection::insertGeometry( g, index ); +} + QgsMultiCurve *QgsMultiLineString::toCurveType() const { QgsMultiCurve *multiCurve = new QgsMultiCurve(); diff --git a/src/core/geometry/qgsmultilinestring.h b/src/core/geometry/qgsmultilinestring.h index 5f8b758af6b..efc6f091771 100644 --- a/src/core/geometry/qgsmultilinestring.h +++ b/src/core/geometry/qgsmultilinestring.h @@ -29,18 +29,16 @@ class CORE_EXPORT QgsMultiLineString: public QgsMultiCurve { public: QgsMultiLineString(); + QString geometryType() const override; QgsMultiLineString *clone() const override SIP_FACTORY; - void clear() override; bool fromWkt( const QString &wkt ) override; - QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override; QDomElement asGML3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override; QString asJSON( int precision = 17 ) const override; - - //! Adds a geometry and takes ownership. Returns true in case of success bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override; + bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override; /** Returns the geometry converted to the more generic curve type QgsMultiCurve \returns the converted geometry. Caller takes ownership*/ diff --git a/src/core/geometry/qgsmultipoint.h b/src/core/geometry/qgsmultipoint.h index a695317cb91..2b7794cd934 100644 --- a/src/core/geometry/qgsmultipoint.h +++ b/src/core/geometry/qgsmultipoint.h @@ -29,26 +29,18 @@ class CORE_EXPORT QgsMultiPointV2: public QgsGeometryCollection { public: QgsMultiPointV2(); + QString geometryType() const override; QgsMultiPointV2 *clone() const override SIP_FACTORY; QgsMultiPointV2 *toCurveType() const override SIP_FACTORY; - bool fromWkt( const QString &wkt ) override; void clear() override; - - // inherited: int wkbSize() const; - // inherited: unsigned char* asWkb( int& binarySize ) const; - // inherited: QString asWkt( int precision = 17 ) const; QDomElement asGML2( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override; QDomElement asGML3( QDomDocument &doc, int precision = 17, const QString &ns = "gml" ) const override; QString asJSON( int precision = 17 ) const override; - int nCoordinates() const override; - - //! Adds a geometry and takes ownership. Returns true in case of success bool addGeometry( QgsAbstractGeometry *g SIP_TRANSFER ) override; bool insertGeometry( QgsAbstractGeometry *g SIP_TRANSFER, int index ) override; - QgsAbstractGeometry *boundary() const override SIP_FACTORY; #ifndef SIP_RUN