public static IEnumerable <TileReference> GetTilesForRectangle(this TileConfig tileConfig, Coordinaat[] rectangle) { var minX = rectangle.Min(r => r.X); var maxX = rectangle.Max(r => r.X); var minY = rectangle.Min(r => r.Y); var maxY = rectangle.Max(r => r.Y); var minKolom = (int)Math.Floor((minX - tileConfig.LinksBoven.X) / tileConfig.TegelBreedte) + 1; var minRij = (int)Math.Floor((tileConfig.LinksBoven.Y - maxY) / tileConfig.TegelHoogte) + 1; var maxKolom = (int)Math.Floor((maxX - tileConfig.LinksBoven.X) / tileConfig.TegelBreedte) + 1; var maxRij = (int)Math.Floor((tileConfig.LinksBoven.Y - minY) / tileConfig.TegelHoogte) + 1; if (minKolom < 0) { minKolom = 0; } if (minRij < 0) { minRij = 0; } if (maxKolom < 0 || maxRij < 0) { yield break; } for (var kolom = minKolom; kolom <= maxKolom; kolom++) { for (var rij = minRij; rij <= maxRij; rij++) { var x = tileConfig.LinksBoven.X + (kolom - 1) * tileConfig.TegelBreedte; var y = tileConfig.LinksBoven.Y - (rij - 1) * tileConfig.TegelHoogte; yield return(new TileReference { TileConfig = tileConfig, Kolom = kolom, Rij = rij, TopLeft = new Coordinaat(x, y), BottomRight = new Coordinaat(x + tileConfig.TegelBreedte, y - tileConfig.TegelHoogte), }); } } }
static Utilities.TileFile[] ImagesForRectangle(Point3d[] rectangle, TileConfig config) { var dbFileName = Application.DocumentManager.CurrentDocument.Database.Filename; var dbPath = new FileInfo(dbFileName).DirectoryName; var tilesForRectangle = config.GetTilesForRectangle(rectangle.ToCoordinaat()).ToArray(); var autocadProgress = new ProgressMeter(); autocadProgress.SetLimit(tilesForRectangle.Length); autocadProgress.Start("Tiles worden verzameld"); var tileFiles = tilesForRectangle .AsParallel() .Select(tile => GetTileFile(tile, dbPath, autocadProgress)) .ToArray(); autocadProgress.Stop(); autocadProgress.Dispose(); return(tileFiles); }