/// <summary>
    /// See ICanvas.
    /// </summary>
    public override bool AddRectangle(int width, int height, out int xOffset, out int yOffset, out int lowestFreeHeightDeficit)
    {
        bool rectangleAdded = base.AddRectangle(width, height, out xOffset, out yOffset, out lowestFreeHeightDeficit);

        // ------------

        Rectangle rectAdded = new Rectangle(xOffset, yOffset, width, height);

        if (rectangleAdded)
        {
            _nbrRectanglesAdded++;

            if (_showCanvasImages)
            {
                int bitmapWidth = _canvasWidth * _imageZoom;
                int bitmapHeight = _canvasHeight * _imageZoom;
                using (Bitmap bitmap = new Bitmap(bitmapWidth, bitmapHeight))
                {
                    using (Graphics graphics = Graphics.FromImage(bitmap))
                    {
                        int xImageOffset = 0;

                        for (int x = 0; x < CanvasCells.NbrColumns; x++)
                        {
                            int yImageOffset = 0;
                            for (int y = 0; y < CanvasCells.NbrRows; y++)
                            {
                                int cellWidth = CanvasCells.ColumnWidth(x);
                                int cellHeight = CanvasCells.RowHeight(y);
                                Rectangle rectCell = new Rectangle(xImageOffset, yImageOffset, cellWidth, cellHeight);
                                bool newlyOccupied = rectAdded.Contains(rectCell);

                                DrawRectangle(
                                    graphics,
                                    cellWidth * _imageZoom, cellHeight * _imageZoom,
                                    xImageOffset * _imageZoom, yImageOffset * _imageZoom,
                                    CanvasCells.Item(x, y).occupied,
                                    newlyOccupied);

                                yImageOffset += CanvasCells.RowHeight(y);
                            }

                            xImageOffset += CanvasCells.ColumnWidth(x);
                        }

                        string imageFileName = string.Format(_canvasFolderName + "/canvas_{0}_{1}_{2}.png", _nbrRedimensions, _nbrRectanglesAdded, _sequenceNbr);
                        _sequenceNbr++;
                        string imageServerFileName = HttpContext.Current.Server.MapPath(imageFileName);

                        ImagePlacementDetails singleImageDetails = new ImagePlacementDetails()
                        {
                            Width = width,
                            Height = height,
                            XOffset = xOffset,
                            YOffset = yOffset,
                            ImageUrl = imageFileName
                        };

                        _imageDetails.Add(singleImageDetails);

                        bitmap.Save(imageServerFileName, ImageFormat.Png);
                    }
                }
            }
        }
        else if (_showCanvasImages)
        {
            // Rectangle could not be placed. Show it on its own to make it easier to see how it relates to the canvas.

            int bitmapWidth = width * _imageZoom;
            int bitmapHeight = height * _imageZoom;
            using (Bitmap bitmap = new Bitmap(bitmapWidth, bitmapHeight))
            {
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    DrawRectangle(
                        graphics, bitmapWidth, bitmapHeight, 0, 0, true,
                        true);

                    string imageFileName = string.Format(_canvasFolderName + "/canvas_{0}_{1}_{2}.png", _nbrRedimensions, _nbrRectanglesAdded, _sequenceNbr);
                    _sequenceNbr++;
                    string imageServerFileName = HttpContext.Current.Server.MapPath(imageFileName);

                    ImagePlacementDetails singleImageDetails = new ImagePlacementDetails()
                    {
                        Width = width,
                        Height = height,
                        XOffset = -1,
                        YOffset = -1,
                        ImageUrl = imageFileName
                    };

                    _imageDetails.Add(singleImageDetails);

                    bitmap.Save(imageServerFileName, ImageFormat.Png);
                }
            }
        }

        return rectangleAdded;
    }
Пример #2
0
    /// <summary>
    /// See ICanvas.
    /// </summary>
    public override bool AddRectangle(int width, int height, out int xOffset, out int yOffset, out int lowestFreeHeightDeficit)
    {
        bool rectangleAdded = base.AddRectangle(width, height, out xOffset, out yOffset, out lowestFreeHeightDeficit);

        // ------------

        Rectangle rectAdded = new Rectangle(xOffset, yOffset, width, height);

        if (rectangleAdded)
        {
            _nbrRectanglesAdded++;

            if (_showCanvasImages)
            {
                int bitmapWidth  = _canvasWidth * _imageZoom;
                int bitmapHeight = _canvasHeight * _imageZoom;
                using (Bitmap bitmap = new Bitmap(bitmapWidth, bitmapHeight))
                {
                    using (Graphics graphics = Graphics.FromImage(bitmap))
                    {
                        int xImageOffset = 0;

                        for (int x = 0; x < CanvasCells.NbrColumns; x++)
                        {
                            int yImageOffset = 0;
                            for (int y = 0; y < CanvasCells.NbrRows; y++)
                            {
                                int       cellWidth     = CanvasCells.ColumnWidth(x);
                                int       cellHeight    = CanvasCells.RowHeight(y);
                                Rectangle rectCell      = new Rectangle(xImageOffset, yImageOffset, cellWidth, cellHeight);
                                bool      newlyOccupied = rectAdded.Contains(rectCell);

                                DrawRectangle(
                                    graphics,
                                    cellWidth * _imageZoom, cellHeight * _imageZoom,
                                    xImageOffset * _imageZoom, yImageOffset * _imageZoom,
                                    CanvasCells.Item(x, y).occupied,
                                    newlyOccupied);

                                yImageOffset += CanvasCells.RowHeight(y);
                            }

                            xImageOffset += CanvasCells.ColumnWidth(x);
                        }

                        string imageFileName = string.Format(_canvasFolderName + "/canvas_{0}_{1}_{2}.png", _nbrRedimensions, _nbrRectanglesAdded, _sequenceNbr);
                        _sequenceNbr++;
                        string imageServerFileName = HttpContext.Current.Server.MapPath(imageFileName);

                        ImagePlacementDetails singleImageDetails = new ImagePlacementDetails()
                        {
                            Width    = width,
                            Height   = height,
                            XOffset  = xOffset,
                            YOffset  = yOffset,
                            ImageUrl = imageFileName
                        };

                        _imageDetails.Add(singleImageDetails);

                        bitmap.Save(imageServerFileName, ImageFormat.Png);
                    }
                }
            }
        }
        else if (_showCanvasImages)
        {
            // Rectangle could not be placed. Show it on its own to make it easier to see how it relates to the canvas.

            int bitmapWidth  = width * _imageZoom;
            int bitmapHeight = height * _imageZoom;
            using (Bitmap bitmap = new Bitmap(bitmapWidth, bitmapHeight))
            {
                using (Graphics graphics = Graphics.FromImage(bitmap))
                {
                    DrawRectangle(
                        graphics, bitmapWidth, bitmapHeight, 0, 0, true,
                        true);

                    string imageFileName = string.Format(_canvasFolderName + "/canvas_{0}_{1}_{2}.png", _nbrRedimensions, _nbrRectanglesAdded, _sequenceNbr);
                    _sequenceNbr++;
                    string imageServerFileName = HttpContext.Current.Server.MapPath(imageFileName);

                    ImagePlacementDetails singleImageDetails = new ImagePlacementDetails()
                    {
                        Width    = width,
                        Height   = height,
                        XOffset  = -1,
                        YOffset  = -1,
                        ImageUrl = imageFileName
                    };

                    _imageDetails.Add(singleImageDetails);

                    bitmap.Save(imageServerFileName, ImageFormat.Png);
                }
            }
        }

        return(rectangleAdded);
    }