Ejemplo n.º 1
0
 private void sheet3_MouseClick(object sender, MouseEventArgs e)
 {
     //нажата кнопка "выбрать вершину", ищем степень вершины
     if (selectButton.Enabled == false)
     {
         foreach (int i in V3.Keys)
         {
             if (Math.Pow((V3[i].x - e.X), 2) + Math.Pow((V3[i].y - e.Y), 2) <= G3.R * G3.R)
             {
                 if (selected_C1 != -1)
                 {
                     selected_C1 = -1;
                     G3.clearSheet();
                     G3.drawALLGraph(V3, E3);
                     sheet3.Image = G3.GetBitmap();
                 }
                 if (selected_C1 == -1)
                 {
                     G3.drawSelectedVertex(V3[i].x, V3[i].y);
                     selected_C1  = i;
                     sheet3.Image = G3.GetBitmap();
                     listBox.Items.Clear();
                     int degree = 0;
                     foreach (var para in E3)
                     {
                         if ((para.v1 == selected_C1) || (para.v2 == selected_C1))
                         {
                             degree += 1;
                         }
                     }
                     listBox.Items.Add("Степень вершины №" + (selected_C1 + 1) + " равна " + degree);
                     break;
                 }
             }
         }
     }
 }
Ejemplo n.º 2
0
 private void sheet_MouseClick(object sender, MouseEventArgs e)
 {
     //нажата кнопка "выбрать вершину", ищем степень вершины
     if (selectButton.Enabled == false)
     {
         for (int i = 0; i < V.Count; i++)
         {
             if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
             {
                 if (selected1 != -1)
                 {
                     selected1 = -1;
                     G.clearSheet();
                     G.drawALLGraph(V, E, W);
                     sheet.Image = G.GetBitmap();
                 }
                 if (selected1 == -1)
                 {
                     G.drawSelectedVertex(V[i].x, V[i].y);
                     selected1   = i;
                     sheet.Image = G.GetBitmap();
                     createAdjAndOut();
                     listBoxMatrix.Items.Clear();
                     int degree = 0;
                     for (int j = 0; j < V.Count; j++)
                     {
                         degree += AMatrix[selected1, j];
                     }
                     listBoxMatrix.Items.Add("Степень вершины №" + (selected1 + 1) + " равна " + degree);
                     break;
                 }
             }
         }
     }
     //нажата кнопка "рисовать вершину"
     if (drawVertexButton.Enabled == false)
     {
         V.Add(new Vertex(e.X, e.Y));
         G.drawVertex(e.X, e.Y, V.Count.ToString());
         sheet.Image = G.GetBitmap();
     }
     //нажата кнопка "рисовать ребро"
     if (drawEdgeButton.Enabled == false)
     {
         if (e.Button == MouseButtons.Left)
         {
             for (int i = 0; i < V.Count; i++)
             {
                 if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
                 {
                     if (selected1 == -1)
                     {
                         G.drawSelectedVertex(V[i].x, V[i].y);
                         selected1   = i;
                         sheet.Image = G.GetBitmap();
                         break;
                     }
                     if (selected2 == -1)
                     {
                         G.drawSelectedVertex(V[i].x, V[i].y);
                         selected2 = i;
                         E.Add(new Edge(selected1, selected2));
                         Value.Add(textBox1.Text);
                         W.Add(new Weight(selected1, selected2, Value[Value.Count - 1]));
                         G.drawEdge(V[selected1], V[selected2], E[E.Count - 1], E.Count - 1, W[W.Count - 1]);
                         selected1   = -1;
                         selected2   = -1;
                         sheet.Image = G.GetBitmap();
                         break;
                     }
                 }
             }
         }
         if (e.Button == MouseButtons.Right)
         {
             if ((selected1 != -1) &&
                 (Math.Pow((V[selected1].x - e.X), 2) + Math.Pow((V[selected1].y - e.Y), 2) <= G.R * G.R))
             {
                 G.drawVertex(V[selected1].x, V[selected1].y, (selected1 + 1).ToString());
                 selected1   = -1;
                 sheet.Image = G.GetBitmap();
             }
         }
     }
     //нажата кнопка "удалить элемент"
     if (deleteButton.Enabled == false)
     {
         bool flag = false; //удалили ли что-нибудь по ЭТОМУ клику
         //ищем, возможно была нажата вершина
         for (int i = 0; i < V.Count; i++)
         {
             if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
             {
                 for (int j = 0; j < E.Count; j++)
                 {
                     if ((E[j].v1 == i) || (E[j].v2 == i))
                     {
                         E.RemoveAt(j);
                         j--;
                     }
                     else
                     {
                         if (E[j].v1 > i)
                         {
                             E[j].v1--;
                         }
                         if (E[j].v2 > i)
                         {
                             E[j].v2--;
                         }
                     }
                 }
                 V.RemoveAt(i);
                 flag = true;
                 break;
             }
         }
         //ищем, возможно было нажато ребро
         if (!flag)
         {
             for (int i = 0; i < E.Count; i++)
             {
                 if (E[i].v1 == E[i].v2) //если это петля
                 {
                     if ((Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) <= ((G.R + 2) * (G.R + 2))) &&
                         (Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) >= ((G.R - 2) * (G.R - 2))))
                     {
                         E.RemoveAt(i);
                         flag = true;
                         break;
                     }
                 }
                 else //не петля
                 {
                     if (((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) <= (e.Y + 4) &&
                         ((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) >= (e.Y - 4))
                     {
                         if ((V[E[i].v1].x <= V[E[i].v2].x && V[E[i].v1].x <= e.X && e.X <= V[E[i].v2].x) ||
                             (V[E[i].v1].x >= V[E[i].v2].x && V[E[i].v1].x >= e.X && e.X >= V[E[i].v2].x))
                         {
                             E.RemoveAt(i);
                             flag = true;
                             break;
                         }
                     }
                 }
             }
         }
         //если что-то было удалено, то обновляем граф на экране
         if (flag)
         {
             G.clearSheet();
             G.drawALLGraph(V, E, W);
             sheet.Image = G.GetBitmap();
         }
     }
 }
Ejemplo n.º 3
0
        private void sheet2_MouseClick(object sender, MouseEventArgs e)
        {
            //нажата кнопка "выбрать вершину", ищем степень вершины
            if (selectButton.Enabled == false)
            {
                foreach (int i in V2.Keys)
                {
                    if (Math.Pow((V2[i].x - e.X), 2) + Math.Pow((V2[i].y - e.Y), 2) <= G2.R * G2.R)
                    {
                        if (selected_B1 != -1)
                        {
                            selected_B1 = -1;
                            G2.clearSheet();
                            G2.drawALLGraph(V2, E2);
                            sheet2.Image = G2.GetBitmap();
                        }
                        if (selected_B1 == -1)
                        {
                            G2.drawSelectedVertex(V2[i].x, V2[i].y);
                            selected_B1  = i;
                            sheet2.Image = G2.GetBitmap();
                            listBox.Items.Clear();
                            int degree = 0;
                            foreach (var para in E2)
                            {
                                if ((para.v1 == selected_B1) || (para.v2 == selected_B1))
                                {
                                    degree += 1;
                                }
                            }
                            listBox.Items.Add("Степень вершины №" + (selected_B1 + 1) + " равна " + degree);
                            break;
                        }
                    }
                }
            }
            //нажата кнопка "рисовать вершину"
            if (drawVertexButton.Enabled == false)
            {
                V2.Add(CountV2, new Vertex(e.X, e.Y));
                G2.drawVertex(e.X, e.Y, CountV2.ToString());
                sheet2.Image = G2.GetBitmap();
                CountV2++;
            }
            //нажата кнопка "рисовать ребро"
            if (drawEdgeButton.Enabled == false)
            {
                if (e.Button == MouseButtons.Left)
                {
                    foreach (int i in V2.Keys)
                    {
                        if (Math.Pow((V2[i].x - e.X), 2) + Math.Pow((V2[i].y - e.Y), 2) <= G2.R * G2.R)
                        {
                            if (selected_B1 == -1)
                            {
                                G2.drawSelectedVertex(V2[i].x, V2[i].y);
                                selected_B1  = i;
                                sheet2.Image = G2.GetBitmap();
                                break;
                            }
                            if (selected_B2 == -1)
                            {
                                G2.drawSelectedVertex(V2[i].x, V2[i].y);
                                selected_B2 = i;
                                E2.Add(new Edge(selected_B1, selected_B2, E2.Count));
                                G2.drawEdge(V2[selected_B1], V2[selected_B2], E2[E2.Count - 1]);

                                selected_B1  = -1;
                                selected_B2  = -1;
                                sheet2.Image = G2.GetBitmap();
                                break;
                            }
                        }
                    }
                }
                if (e.Button == MouseButtons.Right)
                {
                    if ((selected_B1 != -1) &&
                        (Math.Pow((V2[selected_B1].x - e.X), 2) + Math.Pow((V2[selected_B1].y - e.Y), 2) <= G2.R * G2.R))
                    {
                        G2.drawVertex(V2[selected_B1].x, V2[selected_B1].y, (selected_B1 + 1).ToString());
                        selected_B1  = -1;
                        sheet2.Image = G2.GetBitmap();
                    }
                }
            }
            //нажата кнопка "удалить элемент"
            if (deleteButton.Enabled == false)
            {
                bool flag = false; //удалили ли что-нибудь по ЭТОМУ клику
                //ищем, возможно была нажата вершина
                foreach (int i in V2.Keys)
                {
                    if (Math.Pow((V2[i].x - e.X), 2) + Math.Pow((V2[i].y - e.Y), 2) <= G2.R * G2.R)
                    {
                        for (int j = 0; j < E2.Count; j++)
                        {
                            if ((E2[j].v1 == i) || (E2[j].v2 == i))
                            {
                                E2.RemoveAt(j);
                                j--;
                            }
                        }
                        V2.Remove(i);
                        flag = true;
                        break;
                    }
                }
                //ищем, возможно было нажато ребро
                if (!flag)
                {
                    for (int i = 0; i < E2.Count; i++)
                    {
                        if (E2[i].v1 == E2[i].v2) //если это петля
                        {
                            if ((Math.Pow((V2[E2[i].v1].x - G2.R - e.X), 2) + Math.Pow((V2[E2[i].v1].y - G2.R - e.Y), 2) <= ((G2.R + 2) * (G2.R + 2))) &&
                                (Math.Pow((V2[E2[i].v1].x - G2.R - e.X), 2) + Math.Pow((V2[E2[i].v1].y - G2.R - e.Y), 2) >= ((G2.R - 2) * (G2.R - 2))))
                            {
                                E2.RemoveAt(i);
                                flag = true;
                                break;
                            }
                        }
                        else //не петля
                        {
                            if (((e.X - V2[E2[i].v1].x) * (V2[E2[i].v2].y - V2[E2[i].v1].y) / (V2[E2[i].v2].x - V2[E2[i].v1].x) + V2[E2[i].v1].y) <= (e.Y + 4) &&
                                ((e.X - V2[E2[i].v1].x) * (V2[E2[i].v2].y - V2[E2[i].v1].y) / (V2[E2[i].v2].x - V2[E2[i].v1].x) + V2[E2[i].v1].y) >= (e.Y - 4))
                            {
                                if ((V2[E2[i].v1].x <= V2[E2[i].v2].x && V2[E2[i].v1].x <= e.X && e.X <= V2[E2[i].v2].x) ||
                                    (V2[E2[i].v1].x >= V2[E2[i].v2].x && V2[E2[i].v1].x >= e.X && e.X >= V2[E2[i].v2].x))
                                {
                                    E2.RemoveAt(i);
                                    flag = true;
                                    break;
                                }
                            }
                        }
                    }
                }
                //если что-то было удалено, то обновляем граф на экране
                if (flag)
                {
                    G2.clearSheet();
                    G2.drawALLGraph(V2, E2);
                    sheet2.Image = G2.GetBitmap();
                }
            }
        }
Ejemplo n.º 4
0
 private void sheet_MouseClick(object sender, MouseEventArgs e)
 {
     //если нажата кнопка "выбрать вершину", ищем степень вершины
     if (selectButton.Enabled == false)
     {
         /* for (int i = 0; i < V.Count; i++)
          * {
          *   if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
          *   {
          *       if (isClick)
          *       {
          *           G.drawVertex(e.X, e.Y, V[i].ToString());
          *           sheet.Image = G.GetBitmap();
          *           //V[i].x = e.X - V[i].x;
          *           // V[i].y = e.Y - V[i].y;
          *       }
          *
          *   }
          * }*/
     }
     // если нажата кнопка "рисовать вершину"
     if (drawVertexButton.Enabled == false)
     {
         V.Add(new Vertex(e.X, e.Y));
         G.drawVertex(e.X, e.Y, V.Count.ToString());
         sheet.Image = G.GetBitmap();
     }
     //если нажата кнопка "рисовать ребро"
     if (drawEdgeButton.Enabled == false)
     {
         if (e.Button == MouseButtons.Left)
         {
             for (int i = 0; i < V.Count; i++)
             {
                 if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
                 {
                     if (selected1 == -1)
                     {
                         G.drawSelectedVertex(V[i].x, V[i].y);
                         selected1   = i;
                         sheet.Image = G.GetBitmap();
                         break;
                     }
                     if (selected2 == -1)
                     {
                         G.drawSelectedVertex(V[i].x, V[i].y);
                         selected2 = i;
                         E.Add(new Edge(selected1, selected2));
                         G.drawEdge(V[selected1], V[selected2], E[E.Count - 1]);
                         selected1   = -1;
                         selected2   = -1;
                         sheet.Image = G.GetBitmap();
                         break;
                     }
                 }
             }
         }
         if (e.Button == MouseButtons.Right)
         {
             if ((selected1 != -1) &&
                 (Math.Pow((V[selected1].x - e.X), 2) + Math.Pow((V[selected1].y - e.Y), 2) <= G.R * G.R))
             {
                 G.drawVertex(V[selected1].x, V[selected1].y, (selected1 + 1).ToString());
                 selected1   = -1;
                 sheet.Image = G.GetBitmap();
             }
         }
     }
     //если нажата кнопка "удалить элемент"
     if (deleteButton.Enabled == false)
     {
         bool flag = false; //удалили ли что-нибудь по ЭТОМУ клику
         //ищем, возможно была нажата вершина
         for (int i = 0; i < V.Count; i++)
         {
             if (Math.Pow((V[i].x - e.X), 2) + Math.Pow((V[i].y - e.Y), 2) <= G.R * G.R)
             {
                 for (int j = 0; j < E.Count; j++)
                 {
                     if ((E[j].v1 == i) || (E[j].v2 == i))
                     {
                         E.RemoveAt(j);
                         j--;
                     }
                     else
                     {
                         if (E[j].v1 > i)
                         {
                             E[j].v1--;
                         }
                         if (E[j].v2 > i)
                         {
                             E[j].v2--;
                         }
                     }
                 }
                 V.RemoveAt(i);
                 flag = true;
                 break;
             }
         }
         // ищем, возможно было нажато ребро
         if (!flag)
         {
             for (int i = 0; i < E.Count; i++)
             {
                 if (E[i].v1 == E[i].v2) //если это петля
                 {
                     if ((Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) <= ((G.R + 2) * (G.R + 2))) &&
                         (Math.Pow((V[E[i].v1].x - G.R - e.X), 2) + Math.Pow((V[E[i].v1].y - G.R - e.Y), 2) >= ((G.R - 2) * (G.R - 2))))
                     {
                         E.RemoveAt(i);
                         G.DelWT(i);
                         flag = true;
                         break;
                     }
                 }
                 else //не петля
                 {
                     if (((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) <= (e.Y + 4) &&
                         ((e.X - V[E[i].v1].x) * (V[E[i].v2].y - V[E[i].v1].y) / (V[E[i].v2].x - V[E[i].v1].x) + V[E[i].v1].y) >= (e.Y - 4))
                     {
                         if ((V[E[i].v1].x <= V[E[i].v2].x && V[E[i].v1].x <= e.X && e.X <= V[E[i].v2].x) ||
                             (V[E[i].v1].x >= V[E[i].v2].x && V[E[i].v1].x >= e.X && e.X >= V[E[i].v2].x))
                         {
                             G.DelWT(i);
                             E.RemoveAt(i);
                             flag = true;
                             break;
                         }
                     }
                 }
             }
         }
         //если что-то было удалено, то обновляем граф на экране
         if (flag)
         {
             G.clearOne();
             G.drawALLGraph(V, E);
             sheet.Image = G.GetBitmap();
         }
     }
 }