예제 #1
0
파일: Form1.cs 프로젝트: tgr484/Diploma
        private void button_create_cutting_single_Click(object sender, EventArgs e)
        {
            if (dg_input.Rows.Count < 2)
            {
                MessageBox.Show("Деталей для раскроя должно быть, как минимум две", "Ошибка");
                return;
            }
            dg_output.Rows.Clear();
            dg_output.Columns.Clear();
            dl = new Detail_list(dg_input.RowCount - 1);
            dl.list.Clear();
            dg_to_dl();
            if (Convert.ToDouble(tb_length.Text) < dl.calc_max())
            {
                MessageBox.Show("Одна из деталей длиннее заготовки", "Ошибка");
                return;
            }
            label_best.Text = "0";
            Cutting cutting = new Cutting(Convert.ToDouble(tb_length.Text), dl);

            //Создали карту раскроя первый подходящий
            cutting.create_ffd_cutting_map();
            //Расчитали нижнюю границу
            cutting.calc_botton_border();
            if (cutting.cuttintgPatternList.Count > cutting.bottom_border)
            {
                int i = 0;
                while (true)
                {
                    cutting.S_task();
                    ++i;
                    if (cutting.cuttintgPatternList.Count == cutting.bottom_border || i > 100)
                    {
                        break;
                    }
                }
            }
            output(cutting);
            label_best.Text = tb_length.Text;
        }
예제 #2
0
파일: Form1.cs 프로젝트: tgr484/Diploma
        private void button_create_cutting_best_Click_1(object sender, EventArgs e)
        {
            if (Convert.ToDouble(tb_length_A.Text) >= Convert.ToDouble(tb_length_B.Text))
            {
                MessageBox.Show("Интервал неверный", "Ошибка");
                return;
            }
            if (dg_input.Rows.Count < 2)
            {
                MessageBox.Show("Деталей для раскроя должно быть, как минимум две", "Ошибка");
                return;
            }
            if (Convert.ToDouble(tb_length_A.Text) < dl.calc_max())
            {
                MessageBox.Show("Одна из деталей длиннее наименьшей заготовки", "Ошибка");
                return;
            }
            dg_output.Rows.Clear();
            dg_output.Columns.Clear();
            List <Cutting> cuttings = new List <Cutting>();

            dl = new Detail_list(dg_input.RowCount - 1);
            dl.list.Clear();
            dg_to_dl();
            for (int i = Convert.ToInt32(tb_length_A.Text); i <= Convert.ToInt32(tb_length_B.Text); ++i)
            {
                cuttings.Add(new Cutting(i, dl));
            }
            int    best_i    = 0;
            double best_coef = 0;
            int    map_count = 0;

            for (int i = 0; i < cuttings.Count; ++i)
            {
                dl.reset_cb();
                cuttings[i].create_ffd_cutting_map();
                cuttings[i].calc_botton_border();
                if (cuttings[i].cuttintgPatternList.Count > cuttings[i].bottom_border)
                {
                    int j = 0;
                    while (true)
                    {
                        cuttings[i].S_task();
                        ++j;
                        if (cuttings[i].cuttintgPatternList.Count == cuttings[i].bottom_border || j > 100)
                        {
                            break;
                        }
                    }
                }
                cuttings[i].calc_coef();
                if (i == 0)
                {
                    best_i    = 0;
                    best_coef = cuttings[i].cutting_coef;
                    map_count = cuttings[i].cuttintgPatternList.Count;
                }
                else
                {
                    if (cuttings[i].cutting_coef > best_coef || map_count > cuttings[i].cuttintgPatternList.Count)
                    {
                        best_i    = i;
                        best_coef = cuttings[i].cutting_coef;
                        map_count = cuttings[i].cuttintgPatternList.Count;
                    }
                }
            }
            output(cuttings[best_i]);
            label_best.Text = cuttings[best_i].L.ToString();
        }