Ejemplo n.º 1
0
        private void ButtonIniciarAlgoritmo_Click(object sender, EventArgs e)
        {
            ////Creando las lista de elementos:
            LinkedList <PosicionEspacioLibre> lstposicionEspacioLibres = new LinkedList <PosicionEspacioLibre>();

            lstposicionEspacioLibres.AddLast(new PosicionEspacioLibre(plancha.largo, plancha.alto));

            //ordenador de mayor a menor por alto
            elementos = new LinkedList <Elemento>(elementos.OrderByDescending(ef => ef.factorDeEncaje)
                                                  .ThenByDescending(ea => ea.alto)
                                                  .ToList());
            //realizar mas ordenamientos de desempate: TODO


            //Quitar elementos mas grandes que la plancha

            foreach (var ele in elementos)
            {
                if (ele.alto > plancha.alto || ele.largo > plancha.largo)
                {
                    elementos.Remove(ele);
                }
            }

            //elemento nuevo nivel
            Elemento primerElementoUltimoNuevoNivel = new Elemento(0, 0);

            while (elementos.Count > 0 && lstposicionEspacioLibres.Count > 0)
            {
                this.ComprobarEspaciosLibres(lstposicionEspacioLibres);

                //añadir elemento de primer nivel
                if (estadoNivel == true)
                {
                    primerElementoUltimoNuevoNivel = elementos.First.Value;
                    estadoNivel = false;
                }



                elementos.First.Value.x = lstposicionEspacioLibres.First.Value.x;
                elementos.First.Value.y = lstposicionEspacioLibres.First.Value.y;

                //añadir a los elementos empacados
                elementosEmpacados.AddLast(elementos.First.Value);



                //eliminar de la primera posicion de elementos:
                elementos.RemoveFirst();

                //crear otra posicion y definir posiciones
                PosicionEspacioLibre posicionEspacioLibre2 = new PosicionEspacioLibre()
                {
                    x     = 0,
                    y     = primerElementoUltimoNuevoNivel.y + primerElementoUltimoNuevoNivel.alto,
                    alto  = plancha.alto - (primerElementoUltimoNuevoNivel.alto + primerElementoUltimoNuevoNivel.y),
                    largo = plancha.largo
                };

                //crear otra posicion y definir posiciones
                PosicionEspacioLibre posicionEspacioLibre1 = new PosicionEspacioLibre()
                {
                    x    = elementosEmpacados.Last.Value.x + elementosEmpacados.Last.Value.largo,
                    y    = primerElementoUltimoNuevoNivel.y,
                    alto = primerElementoUltimoNuevoNivel.alto,
                    // largo = plancha.largo - x
                };
                posicionEspacioLibre1.largo = plancha.largo - posicionEspacioLibre1.x;


                lstposicionEspacioLibres.RemoveFirst();

                lstposicionEspacioLibres.AddFirst(posicionEspacioLibre2);
                lstposicionEspacioLibres.AddFirst(posicionEspacioLibre1);
            }


            int sumaAreaElementosEmpacados = 0;

            int c = 0;

            foreach (var ele in elementosEmpacados)
            {
                //Dibujar los rectangulos:
                DibujarRectangulo(ele.x, ele.y, ele.largo, ele.alto);
                //Mostrando en el listView
                listBoxElementosEmpacados.Items.Add("Elemento:" + (c + 1) + ":" + "Largo: " + ele.largo + "Alto: " + ele.alto);
                //calcular el area de elementos empaquetados:
                sumaAreaElementosEmpacados += ele.area;
                c++;
            }

            lblEspacioNoOcupado.Text = (((plancha.alto * plancha.largo) - sumaAreaElementosEmpacados) * 100 / (plancha.alto * plancha.largo)).ToString() + "%";
        }
Ejemplo n.º 2
0
        private void BtnAbrirTxt_Click(object sender, EventArgs e)
        {
            var fileContent = string.Empty;
            var filePath    = string.Empty;

            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.InitialDirectory = "e:\\";
                openFileDialog.Filter           = "txt files (*.txt)|*.txt|All files (*.*)|*.*";
                openFileDialog.FilterIndex      = 2;
                openFileDialog.RestoreDirectory = true;

                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    //obtener el path del archivo especificado
                    filePath = openFileDialog.FileName;

                    var fileStream = openFileDialog.OpenFile();

                    using (StreamReader reader = new StreamReader(fileStream))
                    {
                        lines = System.IO.File.ReadAllLines(@filePath);
                    }
                }
            }
            try
            {
                for (int i = 0; i < lines.Length; i++)
                {
                    string[] split = lines[i].Split(new Char[] { ' ' });

                    if (i == 0)
                    {
                        int largo = int.Parse(split[0]);
                        int alto  = int.Parse(split[1]);

                        //Modificar tamaño  de picturebox
                        Size size = new Size(largo, alto);
                        pictureBox1.Size = size;

                        //Definiendo la plancha
                        plancha   = new PosicionEspacioLibre(largo, alto);
                        plancha.x = 0;
                        plancha.y = 0;
                        //
                    }
                    else
                    {
                        int      largo    = int.Parse(split[0]);
                        int      alto     = int.Parse(split[1]);
                        Elemento elemento = new Elemento(largo, alto);
                        elementos.AddLast(elemento);

                        Paquete paquete = new Paquete()
                        {
                            largo = largo, alto = alto
                        };
                        paquetes.Add(paquete);

                        listBoxElementosAEmpacar.Items.Add("Elemento:" + elementos.Count + "Largo: " + elementos.ElementAt(elementos.Count - 1).largo + " Alto:" + elementos.ElementAt(elementos.Count - 1).alto);
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }