Skip to content

Commit b282b89

Browse files
committed
Take inheritance into account in qgsgeometry_cast
1 parent f70b5b5 commit b282b89

File tree

5 files changed

+28
-5
lines changed

5 files changed

+28
-5
lines changed

src/core/geometry/qgscurvepolygon.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,13 @@ class CORE_EXPORT QgsCurvePolygon: public QgsSurface
151151
*/
152152
inline const QgsCurvePolygon *cast( const QgsAbstractGeometry *geom ) const
153153
{
154-
if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::CurvePolygon )
154+
if ( !geom )
155+
return nullptr;
156+
157+
QgsWkbTypes::Type flatType = geom->wkbType();
158+
if ( flatType == QgsWkbTypes::CurvePolygon
159+
|| flatType == QgsWkbTypes::Polygon
160+
|| flatType == QgsWkbTypes::Triangle )
155161
return static_cast<const QgsCurvePolygon *>( geom );
156162
return nullptr;
157163
}

src/core/geometry/qgsgeometrycollection.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ class CORE_EXPORT QgsGeometryCollection: public QgsAbstractGeometry
146146
*/
147147
inline const QgsGeometryCollection *cast( const QgsAbstractGeometry *geom ) const
148148
{
149-
if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::GeometryCollection )
149+
if ( geom && QgsWkbTypes::isMultiType( geom->wkbType() ) )
150150
return static_cast<const QgsGeometryCollection *>( geom );
151151
return nullptr;
152152
}

src/core/geometry/qgsmulticurve.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,12 @@ class CORE_EXPORT QgsMultiCurve: public QgsGeometryCollection
6262
*/
6363
inline const QgsMultiCurve *cast( const QgsAbstractGeometry *geom )
6464
{
65-
if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::MultiCurve )
65+
if ( !geom )
66+
return nullptr;
67+
68+
QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() );
69+
if ( flatType == QgsWkbTypes::MultiCurve
70+
||  flatType == QgsWkbTypes::MultiLineString )
6671
return static_cast<const QgsMultiCurve *>( geom );
6772
return nullptr;
6873
}

src/core/geometry/qgsmultisurface.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,13 @@ class CORE_EXPORT QgsMultiSurface: public QgsGeometryCollection
5858
*/
5959
inline const QgsMultiSurface *cast( const QgsAbstractGeometry *geom )
6060
{
61-
if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::MultiSurface )
61+
if ( !geom )
62+
return nullptr;
63+
64+
QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() );
65+
66+
if ( flatType == QgsWkbTypes::MultiSurface
67+
|| flatType == QgsWkbTypes::MultiPolygon )
6268
return static_cast<const QgsMultiSurface *>( geom );
6369
return nullptr;
6470
}

src/core/geometry/qgspolygon.h

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,13 @@ class CORE_EXPORT QgsPolygonV2: public QgsCurvePolygon
8080
*/
8181
inline const QgsPolygonV2 *cast( const QgsAbstractGeometry *geom ) const
8282
{
83-
if ( geom && QgsWkbTypes::flatType( geom->wkbType() ) == QgsWkbTypes::Polygon )
83+
if ( !geom )
84+
return nullptr;
85+
86+
QgsWkbTypes::Type flatType = QgsWkbTypes::flatType( geom->wkbType() );
87+
88+
if ( flatType == QgsWkbTypes::Polygon
89+
|| flatType == QgsWkbTypes::Triangle )
8490
return static_cast<const QgsPolygonV2 *>( geom );
8591
return nullptr;
8692
}

0 commit comments

Comments
 (0)