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),
                    });
                }
            }
        }
示例#2
0
        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);
        }