예제 #1
0
        public override MyRectangle GenerarRectanguloAsociado()
        {
            var Xs = from punto in puntos
                     select punto.X;
            var Ys = from punto in puntos
                     select punto.Y;

            var Xminima = Xs.Min();
            var Yminima = Ys.Min();

            var puntosfinales = from punto in puntos
                                select new PointF(punto.X - Xminima, punto.Y - Yminima);

            var XsNuevos = from punto in puntosfinales
                           select punto.X;
            var YsNuevos = from punto in puntosfinales
                           select punto.Y;
            var rectwidth  = XsNuevos.Max();
            var rectheight = YsNuevos.Max();

            var nuevoPoligono = new Poligono(puntosfinales.ToList());

            nuevoPoligono.color = this.color;

            var rectangulo = new MyRectangle(rectwidth, rectheight, nuevoPoligono);

            return(rectangulo);
        }
예제 #2
0
        private void Button2_Click(object sender, EventArgs e)
        {
            var nombre = textBox1.Text;

            if (modo == Modo.Poligono)
            {
                var copia = new List <PointF>();
                foreach (var p in puntos)
                {
                    copia.Add(p);
                }
                diccionariofiguras[nombre] = new Poligono(copia)
                {
                    color = this.color, Name = nombre
                };
            }
            else if (modo == Modo.Elipse)
            {
                var copia = new List <PointF>();
                foreach (var p in puntos)
                {
                    copia.Add(p);
                }
                diccionariofiguras[nombre] = new Elipse(copia)
                {
                    color = this.color, Name = nombre
                };
            }
            else if (modo == Modo.Regular)
            {
                var copia = new List <PointF>();
                foreach (var p in puntosF)
                {
                    copia.Add(p);
                }
                diccionariofiguras[nombre] = new Regular()
                {
                    puntos = copia, color = this.color, radio = (double)numericUpDown2.Value, Name = nombre
                };
            }
            else if (modo == Modo.Conjunto)
            {
                diccionariofiguras[nombre] = new Conjunto(figurasadibujar)
                {
                    Name = nombre
                };
            }
            if (!listBox1.Items.Contains(nombre))
            {
                listBox1.Items.Add(nombre);
            }
            listBox1.Refresh();
            textBox1.Text = $"Fig{diccionariofiguras.Count + 1}";
            Refresh();
        }
예제 #3
0
        private void PictureBox2_Paint(object sender, PaintEventArgs e)
        {
            if (elementolistBox != null && diccionariofiguras.ContainsKey(elementolistBox))
            {
                e.Graphics.Clear(Color.White);
                var figura = diccionariofiguras[elementolistBox];
                if (figura.modo == Modo.Poligono)
                {
                    var poligono       = figura as Poligono;
                    var puntospequenos = TransformaEscalaAPequeña(poligono.puntos);
                    PintarPolígono(puntospequenos, e, figura.color);
                }
                else if (figura.modo == Modo.Elipse)
                {
                    var elipse         = figura as Elipse;
                    var puntospequenos = TransformaEscalaAPequeña(elipse.puntos);
                    PintarElipse(puntospequenos, e, figura.color);
                }
                else if (figura.modo == Modo.Regular)
                {
                    var elipse         = figura as Regular;
                    var puntospequenos = TransformaEscalaAPequeña(elipse.puntos);
                    PintarRegular(puntospequenos, e, figura.color);
                }
                else
                {
                    var conjunto  = figura as Conjunto;
                    var conjunto2 = new List <FiguraDibujable>();
                    for (int i = 0; i < conjunto.figuras.Count; i++)
                    {
                        var             fig            = conjunto.figuras[i] as FiguraDibujable;
                        var             puntospequeños = TransformaEscalaAPequeña(fig.puntos);
                        FiguraDibujable fig2;
                        if (fig is Elipse)
                        {
                            fig2 = new Elipse(puntospequeños);
                        }
                        else if (fig is Poligono)
                        {
                            fig2 = new Poligono(puntospequeños);
                        }
                        else
                        {
                            fig2 = new Regular(puntospequeños);
                        }
                        fig2.color = fig.color;
                        conjunto2.Add(fig2);
                    }
                    List <MyRectangle> rectangulos = new List <MyRectangle>();
                    foreach (var fig in conjunto2)
                    {
                        if (fig is FiguraDibujable)
                        {
                            var dibujable  = (FiguraDibujable)fig;
                            var rectangulo = dibujable.GenerarRectanguloAsociado();
                            rectangulos.Add(rectangulo);
                        }
                    }

                    var sk     = new Skyline(pictureBox2.Size.Width, pictureBox2.Height);
                    var result = sk.Run(rectangulos);
                    if (result.Item1)
                    {
                        var varios = new Conjunto(result.Item2);
                        figurasadibujar2 = varios.figuras;
                        PintarVarias(varios.figuras, e);
                    }
                    return;
                }
            }
        }