示例#1
0
文件: MSTLSlice.cs 项目: AdilGM/2DCAD
        public bool GenerateTiles(MTileSettings settings)
        {
            // delete previous tiles
            Tiles.Clear();

            double refWidth  = Extents.Width + settings.XPadding;
            double refHeight = Extents.Height + settings.YPadding;

            int nRows    = (int)Math.Ceiling(refHeight / settings.YSize);
            int nColumns = (int)Math.Ceiling(refWidth / settings.XSize);

            var _halfTileWidth  = 0.5 * settings.XSize;
            var _halfTileHeight = 0.5 * settings.YSize;
            var _centre         = Extents.Centre - new MarkGeometryPoint(0.5 * (nColumns * settings.XSize), 0.5 * (nRows * settings.YSize));

            for (int row = 0; row < nRows; row++)
            {
                for (int col = 0; col < nColumns; col++)
                {
                    var centrePoint = new MarkGeometryPoint(
                        (col * settings.XSize) + _halfTileWidth,
                        (row * settings.YSize) + _halfTileHeight
                        );

                    GeometricArithmeticModule.Translate(centrePoint, _centre.X + settings.XOffset, _centre.Y + settings.YOffset);

                    Tiles.Add(new MarkGeometryRectangle(centrePoint, settings.XSize, settings.YSize));
                }
            }

            return(true);
        }
示例#2
0
        public static List <MTileDescription> ToTiles(MTileSettings tileSettings, GeometryExtents <double> extents)
        {
            var tiles = new List <MTileDescription>();

            double refWidth  = extents.Width + tileSettings.XPadding;
            double refHeight = extents.Height + tileSettings.YPadding;

            int nRows    = (int)Math.Ceiling(refHeight / tileSettings.YSize);
            int nColumns = (int)Math.Ceiling(refWidth / tileSettings.XSize);

            var _halfTileWidth  = 0.5 * tileSettings.XSize;
            var _halfTileHeight = 0.5 * tileSettings.YSize;
            var _centre         = extents.Centre - new MarkGeometryPoint(0.5 * (nColumns * tileSettings.XSize), 0.5 * (nRows * tileSettings.YSize));

            int counter = 0;

            for (int row = 0; row < nRows; row++)
            {
                for (int col = 0; col < nColumns; col++)
                {
                    var centrePoint = new MarkGeometryPoint(
                        (col * tileSettings.XSize) + _halfTileWidth,
                        (row * tileSettings.YSize) + _halfTileHeight
                        );

                    GeometricArithmeticModule.Translate(centrePoint, _centre.X + tileSettings.XOffset, _centre.Y + tileSettings.YOffset);

                    tiles.Add(
                        new MTileDescription(
                            counter++, centrePoint.X, centrePoint.Y, tileSettings.XSize, tileSettings.YSize
                            )
                        );
                }
            }

            return(tiles);
        }