Exemple #1
0
 /// <summary>
 /// Рисуем край фигуры
 /// </summary>
 /// <param name="form"></param>
 public static void draw_border(main_form form)
 {
     if (form.display_bord_chb.Checked)
     {
         form.draw_group(g, sol.first_borders, Color.Blue); //рисуем внешнюю границу
     }
 }
Exemple #2
0
 public static void refresh_picture_points(main_form form)
 {
     form.paint(0, 0, true); //очищаем экран
     if (form.display_cros_chb.Checked && form.display_dots_chb.Checked)
     {
         form.draw_points(g, sol.cros, Color.Green); //пересечения - обвод
     }
     if (form.display_end_chb.Checked && form.display_dots_chb.Checked)
     {
         form.draw_points(g, sol.tops, Color.Yellow); //вершины - обвод
     }
     if (form.display_skel_chb.Checked)
     {
         form.draw_group(g, skel_mod, Color.Gray); //скелет
     }
     if (form.display_cros_chb.Checked)
     {
         form.draw_group(g, sol.cros, Color.Red); //точки пересечения
     }
     if (form.display_end_chb.Checked)
     {
         form.draw_group(g, sol.tops, Color.Pink); //точки вершин
     }
     draw_border(form);                            //границы
     if (form.display_sharp_chb.Checked)
     {
         form.draw_sharp(g, sharp, Color.MediumPurple); //отрисовываем решётку
     }
 }
Exemple #3
0
 public static void remove_templ(main_form form)
 {
     if (curr_template != null && sol != null)
     {
         sol.templates.Remove(curr_template);
         sol.save_templates(sol.templates);
         sol.load_templates(form);
         find_templ(form);
         update_templ_count(form);
     }
     else
     {
         MessageBox.Show("Ошибка! Не найдено шаблонов");
     }
 }
Exemple #4
0
 /// <summary>
 /// Добавляем новый шаблон
 /// </summary>
 /// <param name="form"></param>
 public static void add_templ(main_form form)
 {
     if (skel_array != null && sol != null)
     {
         sol.add_template((int)form.num_NUD.Value, skel_array);
         sol.save_templates(sol.templates);
         sol.load_templates(form);
         find_templ(form);
         update_templ_count(form);
     }
     else
     {
         MessageBox.Show("Ошибка! попытка добавления шаблона для пустого содержимого");
     }
 }
Exemple #5
0
 public static void find_templ(main_form form)
 {
     curr_template            = sol.find_template(skel_array, sol.templates); //найденный шаблон
     form.template_GB.Enabled = true;
     if (curr_template != null)
     {
         form.curr_num_LBL.Text  = curr_template.num.ToString();
         form.num_NUD.Value      = curr_template.num;
         form.add_BTN.Enabled    = false;
         form.remove_BTN.Enabled = true;
         form.num_NUD.Enabled    = false;
     }
     else
     {
         form.curr_num_LBL.Text  = "не определена";
         form.add_BTN.Enabled    = true;
         form.remove_BTN.Enabled = false;
         form.num_NUD.Enabled    = true;
     }
 }
Exemple #6
0
 /// <summary>
 /// Загружаем шаблоны цифр из файла
 /// </summary>
 public void load_templates(main_form form)
 {
     if (File.Exists(filename))
     {
         using (FileStream fs = new FileStream(filename, FileMode.OpenOrCreate))
         {
             template[] _temps = (template[])formatter.Deserialize(fs);
             templates = new List <template>();
             foreach (template temp in _temps)
             {
                 templates.Add(temp);
             }
         }
     }
     else
     {
         templates = new List <template>();
     }
     main_form.skeletization.update_templ_count(form);
 }
Exemple #7
0
            public static void solve(main_form form)
            {
                sol_begin = true;

                sol = new solution(form.bmp);
                sol.load_templates(form);
                g = Graphics.FromImage(form.picture.Image);

                sol.find_borders(); //ищем границы

                int r = 0;          //начальный радиус

                if (form.make_soft_chb.Checked)
                {
                    sol.delete_borders(1);
                    r = 2;
                }


                //int r_ = (int)r_NUD.Value;
                //int lim = (int)lim_NUD.Value;
                //bool kkk = true;
                while (sol.iteration(r))    //пока есть точки, которые можно удалить
                {
                    form.paint(0, 0, true); //очищаем экран
                    draw_border(form);

                    for (int i = 0; i < form.bmp.Width; i++) //рисуем оставшиеся точки
                    {
                        for (int j = 0; j < form.bmp.Height; j++)
                        {
                            if (sol.bin_map[i, j])
                            {
                                g.FillRectangle(Brushes.White, i, j, 1, 1);
                            }
                        }
                    }
                    form.picture.Refresh(); //обновляем изображение
                    r++;                    //увеличиваем толщину слоя проверки
                         //if (kkk)
                         //{
                         //    kkk = false;
                         //    MessageBox.Show(r.ToString());
                         //}
                }

                skel_first = sol.add_to_skel(); //добавляем все оставшиеся точки в скелет
                //sol.tops_cros_update(skel_first);

                form.paint(0, 0, true);        //очищаем экран

                skel_mod = new List <Point>(); //модифицированный скелет
                skel_mod.AddRange(skel_first);

                //удаляем "мусорные" пиксели
                while (sol.pixels_buitifier(skel_mod))
                {
                    foreach (var p in sol.removed_points)
                    {
                        skel_mod.Remove(p);
                    }
                    foreach (var p in sol.added_points)
                    {
                        skel_mod.Add(p);
                    }
                    //draw_group(g, sol.removed_points, Color.Magenta);
                    //draw_group(g, sol.added_points, Color.AntiqueWhite);
                }
                sol.tops_cros_update(skel_mod); //поиск вершин и пересечений
                sharp = sol.get_sharp(skel_mod);

                refresh_picture_points(form);

                skel_array = sol.get_skel_array(sharp, sol.tops, sol.cros); //массив-идентификатор особых точек
                find_templ(form);
            }
Exemple #8
0
 public static void update_templ_count(main_form form)
 {
     form.templ_count.Text = sol.templates.Count.ToString();
 }