XAML-Map-Control/MapControl/Shared/TileCollection.cs

39 lines
1.3 KiB
C#
Raw Normal View History

2025-02-27 18:46:32 +01:00
using System.Collections.Generic;
2022-11-22 19:15:34 +01:00
using System.Linq;
namespace MapControl
{
2025-09-15 17:46:31 +02:00
public partial class TileCollection : List<Tile>
2022-11-22 19:15:34 +01:00
{
/// <summary>
2025-08-22 16:10:03 +02:00
/// Adds existing Tiles from the source collection or newly created Tiles to fill the specified tile matrix.
2022-11-22 19:15:34 +01:00
/// </summary>
2025-08-22 16:10:03 +02:00
public void FillMatrix(TileCollection source, int zoomLevel, int xMin, int yMin, int xMax, int yMax, int columnCount)
2022-11-22 19:15:34 +01:00
{
2025-08-22 16:10:03 +02:00
for (var y = yMin; y <= yMax; y++)
2022-11-22 19:15:34 +01:00
{
2025-08-22 16:10:03 +02:00
for (var x = xMin; x <= xMax; x++)
{
var tile = source.FirstOrDefault(t => t.ZoomLevel == zoomLevel && t.X == x && t.Y == y);
2022-11-22 19:15:34 +01:00
2025-08-22 16:10:03 +02:00
if (tile == null)
{
tile = new Tile(zoomLevel, x, y, columnCount);
2022-11-22 19:15:34 +01:00
2025-08-22 16:10:03 +02:00
var equivalentTile = source.FirstOrDefault(
t => t.Image.Source != null && t.ZoomLevel == tile.ZoomLevel && t.Column == tile.Column && t.Row == tile.Row);
if (equivalentTile != null)
{
tile.IsPending = false;
tile.Image.Source = equivalentTile.Image.Source; // no opacity animation
}
}
Add(tile);
2022-11-22 19:15:34 +01:00
}
}
}
}
}