Пример #1
0
        private void DrawSelectedTile(Graphics viewGraphics, CanvasViewport viewport)
        {
            if (CurrentColumn < 0 || CurrentRow < 0)
            {
                return;
            }
            int    x            = _selectedTile.X * @interface.TileWidth;
            int    y            = _selectedTile.Y * @interface.TileHeight;
            PointF viewLocation = viewport.GetWorldToViewLocation(new PointF(x, y));
            SizeF  sizeValue    = new SizeF(@interface.TileWidth * viewport.Scale, @interface.TileHeight * viewport.Scale);

            viewGraphics.DrawRectangle(new Pen(@interface.SelectedTileColor, 2), viewLocation.X, viewLocation.Y, sizeValue.Width, sizeValue.Height);
        }
        public override void OnPaint(Graphics graphics, IConvertWorldView convertWorldView)
        {
            InvalidateWorldViewport();
            if (WorldViewGroup.CanvasViewport.Width * WorldViewGroup.CanvasViewport.Height == 0)
            {
                graphics.Clear(Color.FromArgb(207, 207, 207));
                return;
            }
            Color borderColor = Color.FromArgb(194, 194, 194);
            var   realSize    = WorldViewGroup.CanvasViewport.RealSize;
            Image worldBitmap = new Bitmap((int)realSize.Width, (int)realSize.Height);

            graphics.Clear(Color.FromArgb(207, 207, 207));

            RectangleF interserctRect = GetInterserctRect();
            PointF     renderLocation = new PointF(PaddingLeft, PaddingTop);

            renderLocation   = CanvasViewport.GetWorldToViewLocation(renderLocation);
            renderLocation.X = (renderLocation.X).GreaterOrEqualThan(0);
            renderLocation.Y = (renderLocation.Y).GreaterOrEqualThan(0);

            if (TileRender != null)
            {
                Image tileImage = TileRender.GetImage(Graphics.FromImage(worldBitmap), graphics, WorldViewGroup.CanvasViewport);
                int   cBegin    = (int)WorldViewGroup.CanvasViewport.X / TileWidth;
                int   rBegin    = (int)WorldViewGroup.CanvasViewport.Y / TileHeight;

                RectangleF rectCrop = new RectangleF(WorldViewGroup.CanvasViewport.X - cBegin * TileWidth - 0.5f,
                                                     WorldViewGroup.CanvasViewport.Y - rBegin * TileHeight - 0.5f,
                                                     WorldViewGroup.CanvasViewport.Width, WorldViewGroup.CanvasViewport.Height);
                graphics.DrawImageFromOtherImage(tileImage, rectCrop,
                                                 new RectangleF(renderLocation, interserctRect.Size));
            }


            WorldViewGroup.OnPaint(Graphics.FromImage(worldBitmap), convertWorldView);

            graphics.DrawImageFromOtherImage(worldBitmap, new RectangleF(0, 0, worldBitmap.Width, worldBitmap.Height),
                                             new RectangleF(renderLocation, interserctRect.Size));

            PointF firstCorner = new PointF(PaddingLeft, PaddingTop);
            PointF lastCorner  = new PointF(PaddingLeft + WorldViewGroup.EditorCanvas.Width * WorldViewGroup.CanvasViewport.Scale,
                                            PaddingTop + WorldViewGroup.EditorCanvas.Height * WorldViewGroup.CanvasViewport.Scale);

            firstCorner = CanvasViewport.GetWorldToViewLocation(firstCorner);
            lastCorner  = CanvasViewport.GetWorldToViewLocation(lastCorner);

            RectangleF r = RectangleF.FromLTRB(firstCorner.X, firstCorner.Y, lastCorner.X, lastCorner.Y);

            graphics.DrawRectangle(new Pen(borderColor, 1), r.X, r.Y, r.Width, r.Height);
        }
Пример #3
0
        public void OnPaintInView(Graphics viewGraphics, CanvasViewport viewViewport, IConvertWorldView convertWorldView)
        {
            foreach (var index in @interface.TilesIndex)
            {
                int col = index % @interface.TilesheetColumns;
                int row = index / @interface.TilesheetColumns;


                Rectangle rect = new Rectangle(col * @interface.TileWidth, row * @interface.TileHeight, @interface.TileWidth, @interface.TileHeight);

                Point viewLocation = viewViewport.GetWorldToViewLocation(new Point(col * @interface.TileWidth, row * @interface.TileHeight)).ToPoint();
                Size  sizeValue    = new Size((int)(@interface.TileWidth * viewViewport.Scale), (int)(@interface.TileHeight * viewViewport.Scale));

                var viewRect = new Rectangle(viewLocation, sizeValue);
                viewGraphics.DrawRectangle(new Pen(@interface.TileObjectColor, 2), viewRect);
            }
        }