@@ -315,7 +315,11 @@ QGis::GeometryType QgsGeometry::type() const
315
315
316
316
bool QgsGeometry::isMultipart () const
317
317
{
318
- return QGis::isMultiType ( wkbType () );
318
+ if ( !d || !d->geometry )
319
+ {
320
+ return false ;
321
+ }
322
+ return QgsWKBTypes::isMultiType ( d->geometry ->wkbType () );
319
323
}
320
324
321
325
void QgsGeometry::fromGeos ( GEOSGeometry *geos )
@@ -538,13 +542,29 @@ int QgsGeometry::addRing( QgsCurveV2* ring )
538
542
539
543
int QgsGeometry::addPart ( const QList<QgsPoint> &points, QGis::GeometryType geomType )
540
544
{
541
- Q_UNUSED ( geomType );
542
- if ( !d || !d->geometry )
545
+ if ( !d )
543
546
{
544
- return 2 ;
547
+ return 1 ;
545
548
}
546
549
547
- detach ( true );
550
+ if ( !d->geometry )
551
+ {
552
+ detach ( false );
553
+ switch ( geomType )
554
+ {
555
+ case QGis::Point:
556
+ d->geometry = new QgsMultiPointV2 ();
557
+ break ;
558
+ case QGis::Line:
559
+ d->geometry = new QgsMultiLineStringV2 ();
560
+ break ;
561
+ case QGis::Polygon:
562
+ d->geometry = new QgsMultiPolygonV2 ();
563
+ break ;
564
+ default :
565
+ return 1 ;
566
+ }
567
+ }
548
568
549
569
if ( !isMultipart () )
550
570
{
@@ -564,14 +584,12 @@ int QgsGeometry::addPart( const QList<QgsPoint> &points, QGis::GeometryType geom
564
584
ringLine->setPoints ( partPoints );
565
585
partGeom = ringLine;
566
586
}
567
- removeWkbGeos ();
568
- return addPart ( dynamic_cast <QgsCurveV2*>( partGeom ) );
587
+ return addPart ( partGeom );
569
588
}
570
589
571
- int QgsGeometry::addPart ( QgsCurveV2 * part )
590
+ int QgsGeometry::addPart ( QgsAbstractGeometryV2 * part )
572
591
{
573
592
detach ( true );
574
-
575
593
removeWkbGeos ();
576
594
return QgsGeometryEditUtils::addPart ( d->geometry , part );
577
595
}
@@ -583,15 +601,7 @@ int QgsGeometry::addPart( const QgsGeometry *newPart )
583
601
return 1 ;
584
602
}
585
603
586
- detach ( true );
587
-
588
- QgsAbstractGeometryV2* g = d->geometry ->clone ();
589
- QgsCurveV2* curve = dynamic_cast <QgsCurveV2*>( g );
590
- if ( !curve )
591
- {
592
- delete g; return 1 ;
593
- }
594
- return addPart ( curve );
604
+ return addPart ( newPart->d ->geometry ->clone () );
595
605
}
596
606
597
607
int QgsGeometry::addPart ( GEOSGeometry *newPart )
@@ -1435,8 +1445,9 @@ bool QgsGeometry::deletePart( int partNum )
1435
1445
}
1436
1446
1437
1447
detach ( true );
1438
-
1439
- return QgsGeometryEditUtils::deletePart ( d->geometry , partNum );
1448
+ bool ok = QgsGeometryEditUtils::deletePart ( d->geometry , partNum );
1449
+ removeWkbGeos ();
1450
+ return ok;
1440
1451
}
1441
1452
1442
1453
int QgsGeometry::avoidIntersections ( QMap<QgsVectorLayer*, QSet< QgsFeatureId > > ignoreFeatures )
0 commit comments