using ProjectKnapsack.forms; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using static ProjectKnapsack.classes.KnapsackParameters; namespace ProjectKnapsack.classes; public class KnapsackVisualizer { public void Visualize(List items, int capacity, MainForm form) { PictureBox? pictureBox = form.Controls["pictureBox1"] as PictureBox;// получаем ссылку на PictureBox на форме Bitmap bitmap = new Bitmap(pictureBox.Width, pictureBox.Height); using (Graphics graphics = Graphics.FromImage(bitmap)) { graphics.Clear(Color.White); // Отрисовка рюкзака int knapsackWidth = 100; int knapsackHeight = 200; int knapsackX = 50; int knapsackY = pictureBox.Height / 2 - knapsackHeight / 2; graphics.FillRectangle(Brushes.LightGray, knapsackX, knapsackY, knapsackWidth, knapsackHeight); graphics.DrawRectangle(Pens.Black, knapsackX, knapsackY, knapsackWidth, knapsackHeight); // Добавление текста "Капацитет" рядом с рюкзаком string capacityText = "Capacity: " + capacity; graphics.DrawString(capacityText, SystemFonts.DefaultFont, Brushes.Black, knapsackX + knapsackWidth + 10, knapsackY); // Отрисовка выбранных предметов int startX = 200; int startY = 50; int spacingX = 150; foreach (var item in items) { int itemWidth = item.Weight; int itemHeight = item.Value; int itemX = startX + items.IndexOf(item) * spacingX; int itemY = startY; // Отрисовка прямоугольника, представляющего предмет graphics.FillRectangle(Brushes.LightBlue, itemX, itemY, itemWidth, itemHeight); graphics.DrawRectangle(Pens.Black, itemX, itemY, itemWidth, itemHeight); // Добавление текста с именем предмета string itemName = item.Name; graphics.DrawString(itemName, SystemFonts.DefaultFont, Brushes.Black, itemX, itemY + itemHeight + 5); } } pictureBox.Image = bitmap; // Отображение изображения на PictureBox } }