예제 #1
0
        //главная функция отрисовки всего шкафа
        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);
            }
        }
예제 #2
0
        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;
        }
예제 #3
0
        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;
        }