//главная функция отрисовки всего шкафа public void Draw(Shcaf.BaseShcaf _baseShcaf, PaintEventArgs e, Bitmap bit, bool getimage, Label label) { SizeShcah(_baseShcaf); _baseShcaf.listE = _baseShcaf.listE.OrderBy(x => x.level).ToList(); Redraw(_baseShcaf); Razmer(_baseShcaf); Counting(_baseShcaf); Stoimost(_baseShcaf); //отрисовка размерной сетки foreach (var b in _baseShcaf.listS) { if (b.ListPen != null) { foreach (var pen in b.ListPen) { e.Graphics.DrawLine(pen.MyPen, pen.Start, pen.End); } } } //отрисовка цифр размера if (_baseShcaf.ListText != null) { foreach (var b in _baseShcaf.ListText) { e.Graphics.DrawString(b.SizeText, new Font("Arial", 7), Brushes.Black, b.Start); } } //отрисовка стоимости if (_baseShcaf.CountList != null) { foreach (var b in _baseShcaf.CountList) { label.Text = b.SizeText.ToString(); } } //отрисовка элементов foreach (var b in _baseShcaf.listE) { if (b.FonImg != null) { e.Graphics.DrawImage(b.FonImg, b.FonRec); } e.Graphics.DrawImage(b.Img, b.Rec); if (b.ListPen.Count != 0) { foreach (var pen in b.ListPen) { e.Graphics.DrawLine(pen.MyPen, pen.Start, pen.End); } } } //отрисовка виртуального элемента if (getimage == true) { Rectangle recNew; newElement.Img = bit; newElement.Rec = new Rectangle(newElement.Rec.X, newElement.Rec.Y, 50, 50); switch (newElement.Id) { case IdElement.Vesh: { newElement.Rec = new Rectangle(newElement.Rec.X, newElement.Rec.Y, bit.Width, bit.Height); break; } case IdElement.Yschik: { newElement.Rec = new Rectangle(newElement.Rec.X, newElement.Rec.Y, bit.Width, bit.Height); break; } case IdElement.Polka: { newElement.Rec = new Rectangle(newElement.Rec.X, newElement.Rec.Y, bit.Width, 7); break; } } recNew = GetXY(_baseShcaf); TryDraw = TryOnDraw(recNew, _baseShcaf); if (newElement.Rec.X > _x && newElement.Rec.Y > _y && newElement.Rec.X < _x + w && newElement.Rec.Y < _y + h) { if (TryDraw) { e.Graphics.DrawImage(Image.FromFile("Element/FonNewElement.png"), recNew); } else { e.Graphics.DrawImage(Image.FromFile("Element/FonNewElementNo.png"), recNew); } } e.Graphics.DrawImage(newElement.Img, newElement.Rec); } }
private int Prioritet(Shcaf.BaseShcaf _baseShcaf, Element el) { int elW = 0; int elH = 0; int bW = 1; bool up = false; _baseShcaf.listE = _baseShcaf.listE.OrderByDescending(x => x.level).ToList();//по убыванию bW = _baseShcaf.listE.First().level + 1; switch (el.Id) { case IdElement.Stena: { if (el.Rec.X < _x + w / 2) elW = el.FonRec.Right; else { elW = el.FonRec.Left; } foreach (var b in _baseShcaf.listE) { switch (b.Id) { case IdElement.Stena: { if (b.Rec.Left < elW && b.FonRec.Right > elW && b.Rec.Left < _x + w / 2) { bW = b.level; b.level = b.level + 1; up = true; continue; } if (b.Rec.Right > elW && b.FonRec.Left < elW && b.Rec.Right > _x + w / 2) { bW = b.level; b.level = b.level + 1; up = true; continue; } break; } } if (up && b.level != 0) { b.level = b.level + 1; } } break; } case IdElement.Polka: { if (el.Rec.Y < _y + h / 2) elH = el.FonRec.Bottom; else { elH = el.FonRec.Top; } foreach (var b in _baseShcaf.listE) { switch (b.Id) { case IdElement.Polka: { if (b.Rec.Top < elH && b.FonRec.Bottom > elH && b.Rec.Top < _y + h / 2) { bW = b.level; b.level = b.level + 1; up = true; continue; } if (b.Rec.Bottom > elH && b.FonRec.Top < elH && b.Rec.Top > _y + h / 2) { bW = b.level; b.level = b.level + 1; up = true; continue; } break; } } if (up && b.level != 0) { b.level = b.level + 1; } } break; } } return bW; }
private Rectangle GetXY(Shcaf.BaseShcaf _baseShcaf) { int minX = 1800; int maxX = 1800; Rectangle rec = new Rectangle(); TryDraw = true; foreach (var b in _baseShcaf.listE) { if (b.Id == IdElement.Zadn) continue; switch (newElement.Id) { case Shcaf.IdElement.Polka: { if (b.Id == IdElement.Stena) { if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right <= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (minX >= newElement.Rec.X - b.Rec.X) { minX = newElement.Rec.X - b.Rec.X; Gup = b.FonRec.Right; } } if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right >= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (maxX >= b.Rec.Right - newElement.Rec.X) { maxX = b.Rec.Right - newElement.Rec.X; Gdown = b.FonRec.Left; } } rec.Width = minX + maxX - b.Img.Width * 2; rec.X = newElement.Rec.X - minX + b.Img.Width; rec.Y = newElement.Rec.Y; rec.Height = b.Img.Width; } break; } case Shcaf.IdElement.Stena: { if (b.Id == IdElement.Polka) { if (b.Rec.Y <= newElement.Rec.Y && b.Rec.Right >= newElement.Rec.X && b.Rec.X <= newElement.Rec.X) { if (minX >= newElement.Rec.Y - b.Rec.Y) { minX = newElement.Rec.Y - b.Rec.Y; Gup = b.FonRec.Bottom; } } if (b.Rec.Y >= newElement.Rec.Y && b.Rec.Right >= newElement.Rec.X && b.Rec.X <= newElement.Rec.X) { if (maxX >= b.Rec.Bottom - newElement.Rec.Y) { maxX = b.Rec.Bottom - newElement.Rec.Y; Gdown = b.FonRec.Top; } } rec.Height = minX + maxX - b.Img.Height * 2 - 1; rec.Width = b.Img.Height; rec.X = newElement.Rec.X; rec.Y = newElement.Rec.Y - minX + b.Img.Height + 1; } break; } case Shcaf.IdElement.Yschik: { if (b.Id == IdElement.Stena) { if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right <= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (minX >= newElement.Rec.X - b.Rec.X) { minX = newElement.Rec.X - b.Rec.X; Gup = b.FonRec.Right; } } if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right >= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (maxX >= b.Rec.Right - newElement.Rec.X) { maxX = b.Rec.Right - newElement.Rec.X; Gdown = b.FonRec.Left; } } rec.Width = minX + maxX - b.Img.Width * 2; rec.X = newElement.Rec.X - minX + b.Img.Width; rec.Y = newElement.Rec.Y; rec.Height = newElement.Img.Height; } break; } case Shcaf.IdElement.Vesh: { if (b.Id == IdElement.Stena) { if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right <= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (minX >= newElement.Rec.X - b.Rec.X) { minX = newElement.Rec.X - b.Rec.X; Gup = b.FonRec.Right; } } if (b.Rec.Bottom >= newElement.Rec.Y && b.Rec.Right >= newElement.Rec.X && b.Rec.Y <= newElement.Rec.Y) { if (maxX >= b.Rec.Right - newElement.Rec.X) { maxX = b.Rec.Right - newElement.Rec.X; Gdown = b.FonRec.Left; } } rec.Width = minX + maxX - b.Img.Width * 2; rec.X = newElement.Rec.X - minX + b.Img.Width; rec.Y = newElement.Rec.Y; rec.Height = newElement.Img.Height; } break; } } } return rec; }