Example #1
0
QgsAbstractGeometry* QgsMultiPolygonV2::boundary() const
{
  QgsMultiLineString* multiLine = new QgsMultiLineString();
  for ( int i = 0; i < mGeometries.size(); ++i )
  {
    if ( QgsPolygonV2* polygon = dynamic_cast<QgsPolygonV2*>( mGeometries.at( i ) ) )
    {
      QgsAbstractGeometry* polygonBoundary = polygon->boundary();

      if ( QgsLineString* lineStringBoundary = dynamic_cast< QgsLineString* >( polygonBoundary ) )
      {
        multiLine->addGeometry( lineStringBoundary );
      }
      else if ( QgsMultiLineString* multiLineStringBoundary = dynamic_cast< QgsMultiLineString* >( polygonBoundary ) )
      {
        for ( int j = 0; j < multiLineStringBoundary->numGeometries(); ++j )
        {
          multiLine->addGeometry( multiLineStringBoundary->geometryN( j )->clone() );
        }
        delete multiLineStringBoundary;
      }
      else
      {
        delete polygonBoundary;
      }
    }
  }
  if ( multiLine->numGeometries() == 0 )
  {
    delete multiLine;
    return nullptr;
  }
  return multiLine;
}
Example #2
0
QgsAbstractGeometry *QgsPolygonV2::boundary() const
{
  if ( !mExteriorRing )
    return nullptr;

  if ( mInteriorRings.isEmpty() )
  {
    return mExteriorRing->clone();
  }
  else
  {
    QgsMultiLineString *multiLine = new QgsMultiLineString();
    multiLine->addGeometry( mExteriorRing->clone() );
    int nInteriorRings = mInteriorRings.size();
    for ( int i = 0; i < nInteriorRings; ++i )
    {
      multiLine->addGeometry( mInteriorRings.at( i )->clone() );
    }
    return multiLine;
  }
}