/// <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; }
/// <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); }