Beispiel #1
0
 private void sheet_MouseClick(object sender, MouseEventArgs e)
 {
     //hledani stupne vrcholu
     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);
                     sheet.Image = G.GetBitmap();
                 }
                 if (selected1 == -1)
                 {
                     G.drawSelectedVrchol(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("Stupen vrcholu №" + (selected1 + 1) + " je rovna " + degree);
                     break;
                 }
             }
         }
     }
     //je stisknuto tlacitko "kreslit vrchol"
     if (drawVrcholButton.Enabled == false)
     {
         V.Add(new Vrchol(e.X, e.Y));
         G.drawVrchol(e.X, e.Y, V.Count.ToString());
         sheet.Image = G.GetBitmap();
     }
     //je stisknuto tlacitko  "kreslit hranu"
     if (drawHranaButton.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.drawSelectedVrchol(V[i].x, V[i].y);
                         selected1   = i;
                         sheet.Image = G.GetBitmap();
                         break;
                     }
                     if (selected2 == -1)
                     {
                         G.drawSelectedVrchol(V[i].x, V[i].y);
                         selected2 = i;
                         int   per1   = 0;
                         bool  per2   = false;
                         Form2 _Hrana = new Form2();
                         if (_Hrana.ShowDialog(this) == DialogResult.OK)
                         {
                             per1 = Int32.Parse(_Hrana.v_v3.Text);
                             if (_Hrana.v_v4.Checked == true)
                             {
                                 per2 = true;
                             }
                             ;
                         }
                         _Hrana.Dispose();
                         E.Add(new Hrana(selected1, selected2, per1, per2));
                         G.drawHrana(V[selected1], V[selected2], E[E.Count - 1], E.Count - 1);
                         listBoxHrany_hrane();
                         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.drawVrchol(V[selected1].x, V[selected1].y, (selected1 + 1).ToString());
                 selected1   = -1;
                 sheet.Image = G.GetBitmap();
             }
         }
     }
     //je stisknuto tlacitko "smazat prvek"
     if (deleteButton.Enabled == false)
     {
         bool flag = false; //удалили ли что-нибудь по ЭТОМУ клику
         //hledame, zda li bylo stisknuto tlacitko vrchol
         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--;
                         }
                     }
                 }
                 listBoxHrany.Items.Clear();
                 listBoxHrany_hrane();
                 V.RemoveAt(i);
                 flag = true;
                 break;
             }
         }
         //hledame, zda li bylo stisknuto tlacitko hrana
         if (!flag)
         {
             for (int i = 0; i < E.Count; i++)
             {
                 if (E[i].v1 == E[i].v2) //zda-li je to smycka
                 {
                     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);
                         listBoxHrany.Items.Clear();
                         listBoxHrany_hrane();
                         flag = true;
                         break;
                     }
                 }
                 else //neni smycka
                 {
                     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);
                             listBoxHrany.Items.Clear();
                             listBoxHrany_hrane();
                             flag = true;
                             break;
                         }
                     }
                 }
             }
         }
         // Jest-li neco bylo vyskrtnuto, aktualizujeme graf
         if (flag)
         {
             G.clearSheet();
             G.drawALLGraph(V, E);
             sheet.Image = G.GetBitmap();
         }
     }
 }