QgsAbstractGeometryV2* QgsGeometryImport::fromMultiPolygon( const QgsMultiPolygon& multipoly ) { QgsMultiPolygonV2* mp = new QgsMultiPolygonV2(); for ( int i = 0; i < multipoly.size(); ++i ) { mp->addGeometry( fromPolygon( multipoly.at( i ) ) ); } return mp; }
void TestQgsGeometryUtils::testExtractLinestrings() { QgsLineString* outerRing1 = new QgsLineString(); outerRing1->setPoints( QList<QgsPointV2>() << QgsPointV2( 1, 1 ) << QgsPointV2( 1, 2 ) << QgsPointV2( 2, 2 ) << QgsPointV2( 2, 1 ) << QgsPointV2( 1, 1 ) ); QgsPolygonV2* polygon1 = new QgsPolygonV2(); polygon1->setExteriorRing( outerRing1 ); QgsLineString* outerRing2 = new QgsLineString(); outerRing2->setPoints( QList<QgsPointV2>() << QgsPointV2( 10, 10 ) << QgsPointV2( 10, 20 ) << QgsPointV2( 20, 20 ) << QgsPointV2( 20, 10 ) << QgsPointV2( 10, 10 ) ); QgsPolygonV2* polygon2 = new QgsPolygonV2(); polygon2->setExteriorRing( outerRing2 ); QgsLineString* innerRing2 = new QgsLineString(); innerRing2->setPoints( QList<QgsPointV2>() << QgsPointV2( 14, 14 ) << QgsPointV2( 14, 16 ) << QgsPointV2( 16, 16 ) << QgsPointV2( 16, 14 ) << QgsPointV2( 14, 14 ) ); polygon2->setInteriorRings( QList<QgsCurve*>() << innerRing2 ); QgsMultiPolygonV2 mpg; mpg.addGeometry( polygon1 ); mpg.addGeometry( polygon2 ); QList<QgsLineString*> linestrings = QgsGeometryUtils::extractLineStrings( &mpg ); QCOMPARE( linestrings.count(), 3 ); qDeleteAll( linestrings ); }