/// <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); //рисуем внешнюю границу } }
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); //отрисовываем решётку } }
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("Ошибка! Не найдено шаблонов"); } }
/// <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("Ошибка! попытка добавления шаблона для пустого содержимого"); } }
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; } }
/// <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); }
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); }
public static void update_templ_count(main_form form) { form.templ_count.Text = sol.templates.Count.ToString(); }