Example #1
0
        public void PnlMouseUp(object sender, EventArgs e)
        {
            Panel pan = sender as Panel;

            Console.WriteLine("Re-Dibujado1");
            if (!this.pnlMvd)
            {
                Console.WriteLine("Re-Dibujado2");
                foreach (Figura_Relacion rel in Formas.Formas.OfType <Figura_Relacion>())
                {
                    if (rel.isFull)
                    {
                        if (rel.RelIni.Name == pan.Name)
                        {
                            rel.RelIni       = pan;
                            rel.RelPuntos[0] = new Point(rel.RelIni.Location.X + rel.RelIni.Size.Width / 2, rel.RelIni.Location.Y + rel.RelIni.Size.Height / 2);
                        }
                        else if (rel.RelFin.Name == pan.Name)
                        {
                            rel.RelFin       = pan;
                            rel.RelPuntos[1] = new Point(rel.RelFin.Location.X + rel.RelFin.Size.Width / 2, rel.RelFin.Location.Y + rel.RelFin.Size.Height / 2);
                        }
                        Formas.Dibujar();
                        masterPanel.BackgroundImage = Image.FromFile(Formas.GetNewBackground());
                    }
                }

                Console.WriteLine("Re-Dibujado2");
            }
        }
Example #2
0
 public Forma BuscarForma(string NombreForma)
 {
     if (ExisteForma(NombreForma))
     {
         Forma Encontrada = Formas.Find(forma => forma.Nombre.Equals(NombreForma));
         return(Encontrada);
     }
     return(null);
 }
Example #3
0
        public void Dibujar()
        {
            Bitmap previousBtm = new Bitmap(CanvasSize.Width, CanvasSize.Height);

            foreach (Figura_Relacion rel in Formas.OfType <Figura_Relacion>())//Creo un nuevo Bitmap para ir dobujando sobre el en el foreach lo que hago es dibujar cada linea hasta obtener una imagen "final", perteneciente solo a las relaciones
            {
                rel.BtmRelacion = rel.DrawToBitmap(previousBtm);
                previousBtm     = rel.BtmRelacion;
            }
        }
Example #4
0
        public Forma AddForma(string NombreForma)
        {
            string FormaActual     = NombreForma.Trim();
            Forma  FormaCompetidor = BuscarForma(NombreForma);

            if (FormaCompetidor == null)
            {
                FormaCompetidor = new Forma(FormaActual);
                Formas.Add(FormaCompetidor);
            }

            return(FormaCompetidor);
        }
Example #5
0
        private void ComplexPlan_Load(object sender, EventArgs e)
        {
            // CRIA ITENS DO MENU DE CONTEXTO
            ContextMenu.Items.Add("Save", null, salvar);
            // DEFINE LISTA PARA CLASSE DE FORMAS
            oFormas.oListaCalc = lstCALC;
            // TAMANHO DA LINHA
            sbarLINHA.Value = Convert.ToInt32(Caneta.Width);
            txtLINHA.Text   = Convert.ToInt32(Caneta.Width).ToString();

            Limpar();

            //CONFIGURA IMAGENS
            Imagem1.Left   = X;
            Imagem1.Top    = Y;
            Imagem1.Width  = M;
            Imagem1.Height = M;

            Imagem2.Left   = X + Q2;
            Imagem2.Top    = Y + 1;
            Imagem2.Width  = M;
            Imagem2.Height = M;

            Tela     = this.CreateGraphics();
            oPainel1 = Imagem1.CreateGraphics();
            oPainel2 = Imagem2.CreateGraphics();

            // LISTA DE CALCULOS
            string[] ListaCalc = Calculo.GetCalcs();

            for (int i = 0; i < ListaCalc.Length; i++)
            {
                cboREGRAS.Items.Add(ListaCalc[i].TrimEnd());
            }
            cboREGRAS.SelectedIndex = 0;
            cboREGRAS.Refresh();

            // LISTA DE FORMAS
            string[] ListaFormas = Formas.GetFormas();

            for (int i = 0; i < ListaFormas.Length; i++)
            {
                if (!String.IsNullOrEmpty(ListaFormas[i]))
                {
                    cboFORMAS.Items.Add(ListaFormas[i].TrimEnd());
                }
            }
            cboFORMAS.SelectedIndex = 0;
            cboFORMAS.Refresh();
        }
        private void Borrar()
        {
            Monto             = null;
            Interes           = null;
            Cuotas            = null;
            MontoTotal        = null;
            DescripcionCuotas = null;
            FechaFin          = null;
            Formas.Clear();
            LoadFormas();

            IsVisible = false;
            IsEnable  = false;
        }
        private void LoadFormas()
        {
            var formas = new FormaDePagoViewModel();

            Formas.Clear();

            foreach (var forma in formas.Formas)
            {
                Formas.Add(new Forma
                {
                    Dias    = forma.Dias,
                    FormaId = forma.FormaId,
                    Nombre  = forma.Nombre,
                });
            }
        }
Example #8
0
        public void PointForRelation(object sender, EventArgs e)//cuando drawing esta activado carga las posiciones de los paneles al una lista
        {
            Panel           pan   = sender as Panel;
            Graphics        g     = this.CreateGraphics();
            Pen             lapiz = new Pen(Color.Black, 3);
            Figura_Relacion rel;

            if (drawing)
            {
                rel = relaciones.Last();
                if (!rel.isFull)
                {
                    if (rel.RelIni == null)
                    {
                        rel.RelIni = pan;
                    }
                    else if (rel.RelIni != null && rel.RelFin == null)
                    {
                        rel.RelFin = pan;
                        rel.isFull = true;
                        rel.RelPuntos.Add(new Point(rel.RelIni.Location.X + rel.RelIni.Size.Width / 2, rel.RelIni.Location.Y + rel.RelIni.Size.Height / 2));
                        rel.RelPuntos.Add(new Point(rel.RelFin.Location.X + rel.RelFin.Size.Width / 2, rel.RelFin.Location.Y + rel.RelFin.Size.Height / 2));
                    }
                }

                if (rel.isFull)
                {
                    Formas.Formas.Add(rel);
                    Formas.CanvasSize = masterPanel.Size;
                    Formas.Dibujar();
                    try
                    {
                        //masterPanel.BackgroundImage = Image.FromFile(@"C:\Users\Andres\Dropbox\6toSemestre\AppAmbProp\Examples\PropietariosMov\PropietariosMovDib4\ProyectoPropietarios\ProyectoPropietarios\Reltst1.bmp");
                        masterPanel.BackgroundImage = Image.FromFile(Formas.GetNewBackground());
                    }
                    catch { }
                    drawing = false;
                }
            }
        }
Example #9
0
        public void CrearPanel(ref Panel panel)                                                //permite crear un panel con una clase
        {
            MenuItem[] menuItems = new MenuItem[] { new MenuItem("Modificar", MenuItem_Click), //hacemos esto para definir como se comportaran luego
                                                    new MenuItem("Reiniciar", MenuItem_Click), new MenuItem("Exit", MenuItem_Click) };
            ContextMenu buttonMenu = new ContextMenu(menuItems);

            panel.Location = new System.Drawing.Point(570, 370);
            panel.Name     = "Panel " + paneles.Count;//se poodria cambiar por parametro aunque no me parecee necesario
            panel.Size     = new System.Drawing.Size(228, 201);
            Figura_Clase fig = new Figura_Clase(panel.Size);

            Formas.Formas.Add(fig);
            panel.BackgroundImage = Image.FromFile(Formas.GetNewBackground());
            panel.BackColor       = Color.LightBlue;
            panel.ContextMenu     = buttonMenu;
            panel.Click          += PointForRelation;//Se guarda en los puntos para utilizarlos en relaciones
            panel.MouseClick     += PnlMouseDown;
            panel.MouseMove      += PnlMouseMove;
            panel.MouseUp        += PnlMouseUp;
            ControlExtension.Draggable(panel, true);
            fig.Contenedor = panel;
            //Controls.Add(panel);
            masterPanel.Controls.Add(panel);
        }
Example #10
0
    /// <summary>
    /// Mueve los personajes a una posicion aleatoria tomando una forma predefinida elegida de manera aleatoria,
    /// tambien rota el 3er personaje de manera que apunte a una direccion de manera aleatoria, independiente
    /// a la formacion de los 5 elementos
    /// </summary>
    public void Reubicar()
    {
        if (instanciados)
        {
            // soporte para ubicacion de personajes distintos al central
            int escala = 2,
                signoX = 1,
                signoY = 1;

            float dx = 1.5f,
                  dy = 1f;

            // forma que mostraran los personajes en conjunto
            Formas forma = (Formas)Random.Range(0, 4);

            // determinando direccion
            dir = (Direccion)Random.Range(0, 4);
            spritePjCentral.flipY = false;

            // aplicando rotacion al pj central
            switch (dir)
            {
            case Direccion.Izq:
                personajes[personajeCentral].transform.localEulerAngles = new Vector3(0, 0, 0);
                break;

            case Direccion.Abj:
                personajes[personajeCentral].transform.localEulerAngles = new Vector3(0, 0, 90);
                break;

            case Direccion.Der:
                personajes[personajeCentral].transform.localEulerAngles = new Vector3(0, 0, 180);
                spritePjCentral.flipY = true;
                break;

            case Direccion.Arr:
                personajes[personajeCentral].transform.localEulerAngles = new Vector3(0, 0, 270);
                break;
            }

            // nueva posicion del personaje central dentro de los limites
            Vector2 posicionNueva = new Vector2(
                Random.Range(MinX, MaxX),
                Random.Range(MinY, MaxY)
                );

            // ubicando personaje central
            personajes[2].transform.localPosition = posicionNueva;

            // ubicando personajes adyacentes al central
            for (int i = 0; i < personajes.Length; i++)
            {
                // haciendo cambios para mostrar la forma de manera correcta
                switch (forma)
                {
                case Formas.FlechaAbj:
                    if (i > 2)
                    {
                        signoX = -1;
                    }
                    break;

                case Formas.FlechaArr:
                    signoY = -1;
                    if (i > 2)
                    {
                        signoX = -1;
                    }
                    break;

                case Formas.FlechaIzq:
                    if (i > 2)
                    {
                        signoY = -1;
                    }
                    break;

                case Formas.FlechaDer:
                    signoX = -1;
                    if (i > 2)
                    {
                        signoY = -1;
                    }
                    break;
                }

                personajes[i].transform.localPosition = new Vector2(
                    personajes[personajeCentral].transform.localPosition.x + dx * signoX * escala,
                    personajes[personajeCentral].transform.localPosition.y + dy * signoY * escala
                    );

                if (escala > 0 && i <= 2)
                {
                    escala--;
                }
                else
                {
                    escala++;
                }
            }
        }
    }
        private async void CalcularResultado()
        {
            try
            {
                if (string.IsNullOrEmpty(this.monto) ||
                    string.IsNullOrEmpty(this.interes) ||
                    string.IsNullOrEmpty(this.cuotas))
                {
                    IsEnable = false;
                    await dialogService.ShowMessage("Error", "No puede haber campos vacios");

                    return;
                }

                var monto   = int.Parse(this.monto);
                var interes = int.Parse(this.interes);
                var cuotas  = int.Parse(this.cuotas);

                if (monto <= 0)
                {
                    IsEnable = false;
                    await dialogService.ShowMessage("Error", "El valor del monto debe ser mayor a cero");

                    return;
                }
                if (interes < 0)
                {
                    IsEnable = false;
                    await dialogService.ShowMessage("Error", "El valor del interés no puede ser negativo");

                    return;
                }
                if (cuotas <= 0)
                {
                    IsEnable = false;
                    await dialogService.ShowMessage("Error", "El valor de cuotas debe ser mayor a cero");

                    return;
                }

                // BindablePicker
                var forma = Formas.ToList().Where(f => f.FormaId == formaElegida).FirstOrDefault();

                calculadora = new CalculadorPrestamo
                {
                    Cuotas  = cuotas,
                    Forma   = forma,
                    Interes = interes,
                    Monto   = monto,
                };
                LoadFechas(calculadora.GetFechas());

                MontoTotal        = string.Format("Total $ {0}", calculadora.MontoTotal.ToString());
                DescripcionCuotas = string.Format("Cuotas {0}", LoadDescripcionCuotas());
                FechaFin          = string.Format("Termina el {0:dd/MM/yyyy}", Fechas.LastOrDefault().DateTime);

                Resultado = new ResultadoViewModel(calculadora);

                IsVisible = true;
                IsEnable  = true;
            }
            catch (FormatException)
            {
                IsEnable = false;
                await dialogService.ShowMessage("Error", "Tipo de formato no válido");

                return;
            }
            catch (Exception ex)
            {
                IsEnable = false;
                await dialogService.ShowMessage("Error", ex.Message);

                return;
            }
        }
Example #12
0
 public bool AddFormas(Formas forma)
 {
     Containner.AddToFormas(forma);
     return Containner.SaveChanges() > 0;
 }
Example #13
0
 public bool EditForma(Formas page)
 {
     return Containner.SaveChanges() > 0;
 }
Example #14
0
        public bool ExisteForma(string FormaAgregar)
        {
            bool Existe = Formas.Any(formaactual => formaactual.Nombre.Equals(FormaAgregar));

            return(Existe);
        }
Example #15
0
        //Sistema de dibujo
        //Objetivo: Dibujar los planos en todos los lienzos.

        private void dibujar()
        {
            //Cronometro de progress bar
            Stopwatch cropro = new Stopwatch();

            cropro.Start();



            Random azar = new Random();
            //Variable para busqueda de origen
            int x_ori = Convert.ToInt32(ui_min_ancho_casa.Value) * 100, y_ori = Convert.ToInt32(ui_min_alto_casa.Value) * 100;

            List <Info_forma>        lista_casas = new List <Info_forma>();
            List <Composicion_calle> lista_comp_calles = new List <Composicion_calle>();
            List <Point>             lista_puntos_calles = new List <Point>();

            //Subsitema #1: calculo de area ciudad

            //Calculo del margen del area de dibujo, para que las formas no sobresalgan
            int margen_ancho = Convert.ToInt32(ui_max_ancho_casa.Value) * 100;
            int margen_alto  = Convert.ToInt32(ui_max_alto_casa.Value) * 100;

            //-------

            int ancho_lienzo = 0, alto_lienzo = 0, area = 0;

            List <int> anchos = new List <int>();
            List <int> altos  = new List <int>();

            for (int i = 0; i < ui_cantidad_casas.Value; i++)
            {
                anchos.Add(azar.Next(Convert.ToInt32(ui_min_ancho_casa.Value), Convert.ToInt32(ui_max_ancho_casa.Value) + 1));
                altos.Add(azar.Next(Convert.ToInt32(ui_min_alto_casa.Value), Convert.ToInt32(ui_max_alto_casa.Value) + 1));
            }
            for (int x = 0; x < ui_cantidad_casas.Value; x++)
            {
                int precalculo = (anchos[x] * altos[x]) * 100;
                area = area + precalculo;
            }

            ancho_lienzo = alto_lienzo = (int)Math.Sqrt(area) * 10;

            float por_ancho = (float)(ancho_lienzo * (Convert.ToInt32(ui_porcentaje_sin_casas.Value) * 0.01));

            ancho_lienzo = (int)(ancho_lienzo + por_ancho);
            ancho_lienzo = ancho_lienzo + margen_ancho;

            float por_alto = (float)(alto_lienzo * (Convert.ToInt32(ui_porcentaje_sin_casas.Value) * 0.01));

            alto_lienzo = (int)(alto_lienzo + por_alto);
            alto_lienzo = alto_lienzo + margen_alto;

            //Mostrar area de ciudad

            ui_label_m2.Text = Convert.ToString((ancho_lienzo / 100 * alto_lienzo / 100));

            //Llamada a la función que crea los lienzos

            crear_pages_area_casas(ancho_lienzo, alto_lienzo);

            //Pintado en el fondo del picture box

            PictureBox primer_nivel = (PictureBox)TabControl.TabPages[0].Controls.Find("Planta 0", true)[0];
            Graphics   fondo        = Graphics.FromImage(primer_nivel.Image);
            Brush      brocha_fondo = new SolidBrush(Color.DarkGreen);

            fondo.FillRectangle(brocha_fondo, new Rectangle(new Point(0, 0), new Size(ancho_lienzo, alto_lienzo)));


            //Subsistema # 2 creación de calles

            if (ui_calle_cuadricula.Checked == true)
            {
                //Se dibujan las veredas (Calle base)
                int dist_entre_cll = Convert.ToInt32(ui_espacio_calles.Value) * 100;

                for (int y = dist_entre_cll; y < alto_lienzo; y += dist_entre_cll)
                {
                    int ancho_calle  = azar.Next(Convert.ToInt32(ui_min_ancho_calle.Value), Convert.ToInt32(ui_max_ancho_calle.Value));
                    int ancho_vereda = azar.Next(Convert.ToInt32(ui_min_ancho_ver.Value), Convert.ToInt32(ui_max_ancho_ver.Value));
                    lista_comp_calles.Add(new Composicion_calle(new Pen(Color.White, (ancho_calle + ancho_vereda) * 100), new Pen(Color.FromArgb(88, 88, 88), ancho_calle * 100), new Point(0, y), new Point(ancho_lienzo, y)));
                }
                for (int x = dist_entre_cll; x < ancho_lienzo; x += dist_entre_cll)
                {
                    int ancho_calle  = azar.Next(Convert.ToInt32(ui_min_ancho_calle.Value), Convert.ToInt32(ui_max_ancho_calle.Value));
                    int ancho_vereda = azar.Next(Convert.ToInt32(ui_min_ancho_ver.Value), Convert.ToInt32(ui_max_ancho_ver.Value));
                    lista_comp_calles.Add(new Composicion_calle(new Pen(Color.White, (ancho_calle + ancho_vereda) * 100), new Pen(Color.FromArgb(88, 88, 88), ancho_calle * 100), new Point(x, 0), new Point(x, alto_lienzo)));
                }
                for (int i = 0; i < lista_comp_calles.Count; i++)
                {
                    fondo.DrawLine(lista_comp_calles[i].calle_base, lista_comp_calles[i].inicio, lista_comp_calles[i].fin);
                    primer_nivel.Refresh();
                }

                //Subsistema # 2.1 Deteccion de pixeles blancos "Pixeles de linea base"
                lista_puntos_calles = Herramienta.obtener_coor_pixel_blancos((Bitmap)primer_nivel.Image);

                //Se dibujan las calles
                for (int i = 0; i < lista_comp_calles.Count; i++)
                {
                    fondo.DrawLine(lista_comp_calles[i].calle, lista_comp_calles[i].inicio, lista_comp_calles[i].fin);
                    primer_nivel.Refresh();
                }
            }
            else if (ui_calle_incompleta.Checked == true)
            {
                //Se dibujan las veredas (Calle base)
                int dist_entre_cll = Convert.ToInt32(ui_espacio_calles.Value) * 100;
                int longitud_x     = ancho_lienzo / dist_entre_cll;
                int longitud_y     = alto_lienzo / dist_entre_cll;
                //Pen dash_street = new Pen(Color.Yellow,20);
                //dash_street.DashStyle = DashStyle.Dash;

                for (int y = dist_entre_cll; y < alto_lienzo; y += dist_entre_cll)
                {
                    int ancho_calle  = azar.Next(Convert.ToInt32(ui_min_ancho_calle.Value), Convert.ToInt32(ui_max_ancho_calle.Value));
                    int ancho_vereda = azar.Next(Convert.ToInt32(ui_min_ancho_ver.Value), Convert.ToInt32(ui_max_ancho_ver.Value));
                    lista_comp_calles.Add(new Composicion_calle(new Pen(Color.White, (ancho_calle + ancho_vereda) * 100), new Pen(Color.FromArgb(88, 88, 88), ancho_calle * 100), new Point(azar.Next(0, longitud_x - 1) * dist_entre_cll, y), new Point(azar.Next(3, longitud_x + 2) * dist_entre_cll, y)));
                }
                for (int x = dist_entre_cll; x < ancho_lienzo; x += dist_entre_cll)
                {
                    int ancho_calle  = azar.Next(Convert.ToInt32(ui_min_ancho_calle.Value), Convert.ToInt32(ui_max_ancho_calle.Value));
                    int ancho_vereda = azar.Next(Convert.ToInt32(ui_min_ancho_ver.Value), Convert.ToInt32(ui_max_ancho_ver.Value));
                    lista_comp_calles.Add(new Composicion_calle(new Pen(Color.White, (ancho_calle + ancho_vereda) * 100), new Pen(Color.FromArgb(88, 88, 88), ancho_calle * 100), new Point(x, azar.Next(0, longitud_y - 1)), new Point(x, azar.Next(3, longitud_y + 2) * dist_entre_cll)));
                }
                for (int i = 0; i < lista_comp_calles.Count; i++)
                {
                    fondo.DrawLine(lista_comp_calles[i].calle_base, lista_comp_calles[i].inicio, lista_comp_calles[i].fin);
                    primer_nivel.Refresh();
                }

                //Subsistema # 2.1 Deteccion de pixeles blancos "Pixeles de linea base"
                lista_puntos_calles = Herramienta.obtener_coor_pixel_blancos((Bitmap)primer_nivel.Image);

                //Se dibujan las calles
                for (int i = 0; i < lista_comp_calles.Count; i++)
                {
                    fondo.DrawLine(lista_comp_calles[i].calle, lista_comp_calles[i].inicio, lista_comp_calles[i].fin);
                    //fondo.DrawLine(dash_street, lista_comp_calles[i].inicio, lista_comp_calles[i].fin);
                    primer_nivel.Refresh();
                }
            }
            else if (ui_calle_curvilineal.Checked == true)
            {
            }
            else if (ui_calle_callejones.Checked == true)
            {
            }



            //MessageBox.Show(Convert.ToString(lista_puntos_calles.Count));


            //Subsistema # 3 de recoleccion de datos: casas

            Stopwatch cronometro = new Stopwatch();

            cronometro.Start();



            for (int ubicacion_datos = 0; ubicacion_datos < ui_cantidad_casas.Value; ubicacion_datos++)
            {
                //Actualización del progress bar #1

                barra.Value = (int)cropro.Elapsed.TotalSeconds;



                if (cronometro.ElapsedMilliseconds >= Convert.ToInt32(ui_tiempo_espera.Value) * 1000)
                {
                    MessageBox.Show("Superó el tiempo limite ", "Operación cancelada", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                    return;
                }


                //Guardo en una variable el valor para los grados
                int grados = 0;
                if (ui_checkbox_girar.Checked)
                {
                    grados = azar.Next(0, 361);
                }
                else
                {
                    int seleccionar = azar.Next(0, 4);
                    switch (seleccionar)
                    {
                    case 0: grados = 90;
                        break;

                    case 1: grados = 180;
                        break;

                    case 2: grados = 270;
                        break;

                    case 3: grados = 360;
                        break;
                    }
                }

                List <String> nombres_de_formas = new List <string>();
                nombres_de_formas.Add("ui_forma_casa_rectangular");
                //nombres_de_formas.Add("ui_forma_casa_hexagonal");
                nombres_de_formas.Add("ui_forma_casa_deformada");
                nombres_de_formas.Add("ui_forma_casa_deformada_chaflan");

                String vano_ventana_seleccionado = ui_group_box_vanos_ventanas.Controls.OfType <RadioButton>().FirstOrDefault(r => r.Checked).Name;

                //En caso de que una de las casas no encaje y pasaron mas de 10 segundos cambiara su tamaño

                if (cronometro.ElapsedMilliseconds > Convert.ToInt32(ui_tiempo_espera.Value) * 1000 - (Convert.ToInt32(ui_tiempo_espera.Value) * 1000 * 0.1)) //Espera el 90% del tiempo de respuesta
                {
                    anchos[ubicacion_datos] = azar.Next(Convert.ToInt32(ui_min_ancho_casa.Value), Convert.ToInt32(ui_max_ancho_casa.Value) + 1);
                    altos[ubicacion_datos]  = azar.Next(Convert.ToInt32(ui_min_alto_casa.Value), Convert.ToInt32(ui_max_alto_casa.Value) + 1);
                }

                //Subsistema 3.1 seleccion de punto origen segun la distribución

                Point origen = new Point();

                String distribucion_seleccionado = ui_group_box_distribucion.Controls.OfType <RadioButton>().FirstOrDefault(r => r.Checked).Name;

                switch (distribucion_seleccionado)
                {
                case "ui_distribucion_aleatoria":
                    origen = Herramienta.seleccionar_punto_cuadricula(ancho_lienzo - margen_ancho, alto_lienzo - margen_alto, 100, Convert.ToInt32(ui_min_ancho_casa.Value) * 100, Convert.ToInt32(ui_min_alto_casa.Value) * 100);
                    //100 es el multiplo
                    break;

                case "ui_distribucion_columnas":
                    if (y_ori >= (alto_lienzo - Convert.ToInt32(ui_max_alto_casa.Value) * 100) - 400)
                    {
                        x_ori = x_ori + 100;
                        y_ori = Convert.ToInt32(ui_min_alto_casa.Value) * 100;
                    }
                    origen = new Point(x_ori, y_ori);
                    y_ori  = y_ori + 100;
                    break;

                case "ui_distribucion_filas":
                    if (x_ori >= (ancho_lienzo - Convert.ToInt32(ui_max_ancho_casa.Value) * 100) - 400)
                    {
                        x_ori = Convert.ToInt32(ui_min_ancho_casa.Value) * 100;
                        y_ori = y_ori + 100;
                    }
                    origen = new Point(x_ori, y_ori);
                    x_ori  = x_ori + 100;
                    break;
                }

                //Aqui empieza la recollecion de la informacion para las casas

                Info_forma nueva_casa = new Info_forma
                                        (
                    ancho_lienzo,
                    alto_lienzo,
                    anchos[ubicacion_datos],
                    altos[ubicacion_datos],
                    azar.Next(Convert.ToInt32(ui_min_grosor_pared.Value), Convert.ToInt32(ui_max_grosor_pared.Value)),
                    origen, //origen de la forma (casa)
                    new Point(),
                    azar.Next(Convert.ToInt32(ui_pilar_cubico_med_min.Value), Convert.ToInt32(ui_pilar_cubico_med_max.Value)),
                    azar.Next(Convert.ToInt32(ui_pilar_round_med_min.Value), Convert.ToInt32(ui_pilar_round_med_max.Value)),
                    azar.Next(1, Convert.ToInt32(ui_cantidad_pisos.Value) + 1),
                    grados,
                    azar.Next(10, 20), // Este numero se multiplica por el valor de la columna Ej 3 espacio = 90 (30CM)
                    azar.Next(1, 5),
                    ui_checkbox_girar.Checked,
                    Posibilidad,
                    Distancia,
                    ui_pegar_casas.Checked,
                    vano_ventana_seleccionado,
                    nombres_de_formas[azar.Next(0, nombres_de_formas.Count)],
                    azar.Next(Convert.ToInt32(ui_pilar_prox_min.Value), Convert.ToInt32(ui_pilar_prox_max.Value)),
                    azar.Next(Convert.ToInt32(ui_vano_puerta_cant_min.Value), Convert.ToInt32(ui_vano_puerta_cant_max.Value))
                                        );

                nueva_casa.resp_alto_forma  = nueva_casa.alto_forma;
                nueva_casa.resp_ancho_forma = nueva_casa.ancho_forma;


                //Subsistema 3.2 #Filtros

                bool interruptor = false;

                //Verificar si existe interseccion entre casas
                //Esta verificación me deja una gran leccion 29/11/20 :)

                for (int x = 0; x < lista_casas.Count; x++)
                {
                    Parallel.For(0, nueva_casa.area_puntos.Count - 1, (i, state) =>
                    {
                        if (lista_casas[x].area_puntos.Contains(nueva_casa.area_puntos[i]))
                        {
                            //Existe interseccion
                            interruptor = true;
                            state.Break();
                        }
                    });
                }


                //Verifica si existe interseccion entre casas y calles

                if (nueva_casa != null)
                {
                    Parallel.For(0, nueva_casa.area_puntos.Count - 1, (i, state) =>
                    {
                        if (lista_puntos_calles.Contains(nueva_casa.area_puntos[i]))
                        {
                            //Existe interseccion
                            interruptor = true;
                            state.Break();
                        }
                    });
                }

                if (interruptor)
                {
                    ubicacion_datos--;
                    continue;
                }
                else
                {
                    // Si no se encontraron intersecciones agrega la info de forma
                    //nueva_casa.area_post();
                    lista_casas.Add(nueva_casa);

                    if (ui_objetos_elevador.Checked == true)
                    {
                        //Valida que el elevador este dentro del espacio de la forma
                        bool encontrado = false;
                        do
                        {
                            nueva_casa.origen_elevador  = Herramienta.seleccionar_punto_cuadricula(nueva_casa.po.X + nueva_casa.ancho_forma * 100, nueva_casa.po.Y + nueva_casa.alto_forma * 100, 100, nueva_casa.po.X, nueva_casa.po.Y);
                            nueva_casa.espacio_elevador = new Rectangle(nueva_casa.origen_elevador.X, nueva_casa.origen_elevador.Y, 2 * 100, 2 * 100);
                            Rectangle resultado = Rectangle.Intersect(nueva_casa.espacio_elevador, nueva_casa.espacio_forma);
                            if (resultado == nueva_casa.espacio_elevador)
                            {
                                encontrado = true;
                            }
                        } while (encontrado == false);
                    }
                }
            }

            //Subsistema #4 superposiciones
            //Encuentro el nombre del radiobutton de la forma que ha escogido el usuario

            String forma_seleccionada = ui_groupbox_forma_casas.Controls.OfType <RadioButton>().FirstOrDefault(r => r.Checked).Name;

            //Pintar lienzos con los datos almacenados, dependiedo de la superposicion

            if (ui_superposicion_esc_cons.Checked == true)
            {
                for (int i = 0; i < ui_cantidad_pisos.Value; i++)
                {
                    for (int recorrer = 0; recorrer < ui_cantidad_casas.Value; recorrer++)
                    {
                        string nombre_page = "Planta " + i;
                        Formas.forma(forma_seleccionada, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                        //Primero se guardan los nombre de los checkbox activo es una lista

                        List <String> nombres_checkbox = new List <string>();
                        foreach (CheckBox c in ui_groupbox_objetos.Controls.OfType <CheckBox>())
                        {
                            if (c.Checked == true)
                            {
                                nombres_checkbox.Add(c.Name);
                            }
                        }

                        //Después de pintar las casas, se pintan los objetos
                        Objetos.objeto(nombres_checkbox, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                        //Esta variable es modificada una vez que PB se haya dibujado
                        lista_casas[recorrer].ubicacion_pb = false;

                        //Actualización del progress bar #1

                        barra.Value = (int)cropro.Elapsed.TotalSeconds;
                    }
                }
            }
            else if (ui_superposicion_esc_cons_var.Checked == true)
            {
                for (int i = 0; i < ui_cantidad_pisos.Value; i++)
                {
                    for (int recorrer = 0; recorrer < ui_cantidad_casas.Value; recorrer++)
                    {
                        if (lista_casas[recorrer].pisos_reales > 0)
                        {
                            string nombre_page = "Planta " + i;
                            Formas.forma(forma_seleccionada, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                            //Primero se guardan los nombre de los checkbox activo es una lista

                            List <String> nombres_checkbox = new List <string>();
                            foreach (CheckBox c in ui_groupbox_objetos.Controls.OfType <CheckBox>())
                            {
                                if (c.Checked == true)
                                {
                                    nombres_checkbox.Add(c.Name);
                                }
                            }

                            //Después de pintar las casas, se pintan los objetos
                            Objetos.objeto(nombres_checkbox, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                            //Esta variable es modificada una vez que PB se haya dibujado
                            lista_casas[recorrer].ubicacion_pb = false;
                        }
                        lista_casas[recorrer].pisos_reales = lista_casas[recorrer].pisos_reales - 1;

                        //Actualización del progress bar #1

                        barra.Value = (int)cropro.Elapsed.TotalSeconds;
                    }
                }
            }
            else if (ui_superposicion_piramidal.Checked == true)
            {
                for (int i = 0; i < ui_cantidad_pisos.Value; i++)
                {
                    for (int recorrer = 0; recorrer < ui_cantidad_casas.Value; recorrer++)
                    {
                        if (i > 0)
                        {
                            int valor_reduccion = 0;
                            if (ui_superposicion_rad_valor_fijo.Checked == true)
                            {
                                valor_reduccion = Convert.ToInt32(ui_superposicion_valor_fijo.Value);
                            }
                            else if (ui_superposicion_rad_valor_por_rango.Checked == true)
                            {
                                int limite = Math.Min(lista_casas[recorrer].alto_forma, lista_casas[recorrer].ancho_forma);
                                //Esto es para manejar la excepcion probar un break
                                if (limite < 0)
                                {
                                    limite = 0;
                                }

                                int modo = 0;
                                valor_reduccion = azar.Next(modo, limite + 1);
                            }
                            lista_casas[recorrer].nuevo_origen = new Point(lista_casas[recorrer].po.X + ((valor_reduccion * 100) / 2), lista_casas[recorrer].po.Y + ((valor_reduccion * 100) / 2));
                            lista_casas[recorrer].po           = lista_casas[recorrer].nuevo_origen;
                            lista_casas[recorrer].ancho_forma  = lista_casas[recorrer].ancho_forma - valor_reduccion;
                            lista_casas[recorrer].alto_forma   = lista_casas[recorrer].alto_forma - valor_reduccion;
                        }

                        if (lista_casas[recorrer].ancho_forma > 2 && lista_casas[recorrer].alto_forma > 2)
                        {
                            string nombre_page = "Planta " + i;
                            Formas.forma(forma_seleccionada, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                            //Después de pintar las casas, se pintan los objetos

                            //Primero se guardan los nombre de los checkbox activo es una lista

                            List <String> nombres_checkbox = new List <string>();
                            foreach (CheckBox c in ui_groupbox_objetos.Controls.OfType <CheckBox>())
                            {
                                if (c.Checked == true)
                                {
                                    nombres_checkbox.Add(c.Name);
                                }
                            }

                            Objetos.objeto(nombres_checkbox, lista_casas[recorrer], (PictureBox)TabControl.TabPages[i].Controls.Find(nombre_page, true)[0]);

                            //Esta variable es modificada una vez que PB se haya dibujado
                            lista_casas[recorrer].ubicacion_pb = false;
                        }


                        //Actualización del progress bar #1

                        barra.Value = (int)cropro.Elapsed.TotalSeconds;
                    }
                }
            }
            MessageBox.Show("Completado exitosamente", "Información", MessageBoxButtons.OK, MessageBoxIcon.Information);
            barra.Value = 0;
        }
 protected FormaGeometrica(Formas tipo)
 {
     Tipo = tipo;
 }